使用Matplotlib的范围从图像绘制3D轮廓

时间:2013-09-15 20:21:50

标签: python matplotlib contour mplot3d

当我呈现here时(在2D中),我想知道如何“缩放”图像输入以绘制到绘图中的范围。更清楚的是,这就是我需要的:

我有一个基于间隔为-1..1的函数生成的400 * 400图像。所以,我做翻译来保存这些数据,如下所示:

x = Utils.translate(pos_x, 0, self.width, -1, 1)
y = Utils.translate(pos_y, 0, self.height, -1, 1)
data = Utils.map_position_to_function(x, y)

即,首先我将其位置映射到我的范围,然后根据这个“新位置”计算de f(x,y)并保存数据。此外,当我保存此图像时,我会对数据进行平移,使其适合0..255范围,生成灰度图像。

问题是,稍后,我必须在功能范围内表示图像轮廓。所以,我有一个400 * 400的图像,我必须在一个范围为-1..1的图中表示。

在2D中,我可以使用以下代码执行此操作:

im = plt.array(Image.open('Mean.png').convert('L'))
plt.figure()
CS = plt.contour(im, origin='image', extent=[-1, 1, -1, 1])
plt.clabel(CS, inline=1, fontsize=10)
plt.savefig("CountorLevel2D.png")

2D Contour

在3D中,我试过这个:

fig = plt.figure()
ax = fig.gca(projection='3d')
row = np.linspace(0, 400, 400)
X,Y = np.meshgrid(row,row)
CS = ax.contour(X, Y, im, cmap=cm.coolwarm, extent=[-1, 1, -1, 1])
plt.clabel(CS, inline=1, fontsize=10)
plt.savefig("ContourLevel3D.png")

3D Contour

但是X和Y仍然在0..400范围内。我不知道出了什么问题,或者我要做的是让X和Y在-1..1范围内。此外,没有标签显示。

另外,由于 im 是一个图像,我读取的值介于0..255之间。我怎么能在-1..1范围内呈现这个呢?

提前致谢。 (:

1 个答案:

答案 0 :(得分:0)

试试这个:

fig = plt.figure()
ax = fig.gca(projection='3d')
row = np.linspace(-1, 1, 400)
X,Y = np.meshgrid(row,row)
CS = ax.contour(X, Y, im, cmap=cm.coolwarm)
plt.clabel(CS, inline=1, fontsize=10)
plt.savefig("ContourLevel3D.png")
相关问题