Python:在2D图像上绘制3D形状

时间:2013-07-10 21:47:18

标签: python matplotlib attributeerror

我正在尝试使用覆盖xy平面的2D图像绘制3D形状。我刚刚开始使用python,所以这比它应该更具挑战性。

这里的这个问题解决了我想要做的事情: Image overlay in 3d plot using python。 但是当我运行提供的代码时,我收到以下错误:

File "test.py", line 13, in <module>
ax.plot_surface(x, y, 10, rstride=5, cstride=5, facecolors=img)
File "/usr/lib64/python2.7/site-packages/mpl_toolkits/mplot3d/axes3d.py", line 663, in plot_surface
rows, cols = Z.shape
AttributeError: 'int' object has no attribute 'shape'

我使用的图像存储在与'test.py.相同的文件夹中。我上面引用的问题使用了get_sample_data中的图像,但如果我编辑它以使用我的图像,则代码如下:

from pylab import *
from mpl_toolkits.mplot3d import Axes3D
from matplotlib._png import read_png

img = read_png('milkyway.png')

x, y = ogrid[0:img.shape[0], 0:img.shape[1]]
ax = gca(projection='3d')
ax.plot_surface(x, y, 10, rstride=5, cstride=5, facecolors=img)
show()

无论是使用get_sample_data还是我自己的图像,我都会遇到同样的错误。 关于我可以改变什么的任何建议? 谢谢!

2 个答案:

答案 0 :(得分:0)

错误似乎是因为plot_surface期望一个'Z'参数的数组,但你已经给它整数10.(因此错误'int'对象没有属性'shape')

答案 1 :(得分:0)

您没有正确加载图片 - read_png()需要文件对象作为输入,而不是文件路径。试试这个:

 f = open('milkyway.png','r')
 img = read_png(f)