首页 文章

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

提问于
浏览
0

当我提出here(2D)时,我想知道如何将图像输入绘制到图中的范围内 . 更清楚的是,这就是我需要的:

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

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

    试试这个:

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

相关问题