我在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
图片为灰度。
答案 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()
这会产生以下结果:
重要的是,这显示了一个3D表面,其颜色不依赖于高度(它是在方向上的渐变)。最明显的问题是着色单个点会丢失matplotlibs表面,这使得为什么将3d绘图称为投影非常清楚!
对不起,这不是很有帮助,希望有更好的软件存在,或者我不知道matplotlibs的全部功能。