1

我正在 matplotlib 上制作曲面图。我的轴是 x、y 和深度。我有一个具有 RGB 值的二维数组,索引对应于 (x,y) 坐标。如何从这个二维数组制作颜色图?谢谢。

制作 numpy 数组的代码:

import Image
import numpy as np
def makeImageArray(filename):
    img = Image.open(filename)
    a = np.array(img).astype("float32")
    return a

图像为灰度。

4

1 回答 1

0

根据我为每个点 (x,y) 收集的信息,您有两条信息,高度和颜色。您希望使用高度绘制曲面图,并根据每个位置的颜色进行着色。

虽然您可以轻松地指定自定义颜色图,但我认为这对您没有帮助。您正在考虑的与将 (x,y) 处的高度映射到颜色的颜色图不同。

结果在此处的 Surface plots 示例中最为明显

我相信您想要的超出了 matplotlib 的范围,只能通过某种我怀疑您是否希望使用的 hack 来完成。

仍然是我的建议:

import pylab as py
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

X = np.arange(-5, 5, 0.1)
Y = np.arange(-5, 5, 0.1)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

colorise = [((5.0 + X[i][i])/10.0, 0.5, 0.0) for i in xrange((len(X)))] 

ax = py.subplot(111, projection='3d')
for i in xrange(len(X)):
    ax.plot(X[i], Y[i], Z[i], "o", color=colorise[i])

py.show()

这会产生以下结果: 例子

重要的是,这显示了一个 3D 表面,其着色不依赖于高度(它是一个方向上的渐变)。最明显的问题是,为单个点着色会丢失 matplotlibs 表面,这使得它非常清楚为什么 3d 绘图被称为投影

抱歉,这不是很有帮助,希望存在更好的软件,或者我不知道 matplotlibs 的全部功能。

于 2013-06-27T19:39:04.707 回答