从numpy数组制作matplotlib色彩映射

时间:2013-06-27 18:09:29

标签: python numpy matplotlib

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

制作numpy数组的代码:

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

图片为灰度。

1 个答案:

答案 0 :(得分:0)

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

虽然您可以轻松指定custom color maps,但我认为这不会对您有所帮助。 您所考虑的并不是将(x,y)处的高度映射到颜色的色彩图。

结果在表面图示例here

中最为明显

我相信你想要的东西超出了matplotlib的范围,只能用某些我怀疑你会想要使用的黑客来完成。

仍然是我的建议:

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()

这会产生以下结果: Example

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

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