我正在尝试使用覆盖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还是我自己的图像,我都会遇到同样的错误。 关于我可以改变什么的任何建议? 谢谢!
答案 0 :(得分:0)
错误似乎是因为plot_surface期望一个'Z'参数的数组,但你已经给它整数10.(因此错误'int'对象没有属性'shape')
答案 1 :(得分:0)
您没有正确加载图片 - read_png()
需要文件对象作为输入,而不是文件路径。试试这个:
f = open('milkyway.png','r')
img = read_png(f)