0

xy 平面に 2D 画像を重ねて 3D 形状をプロットしようとしています。私はPythonを使い始めたばかりなので、これは必要以上に困難です。

ここでのこの質問は、私がやろうとしていることに対処しています: Python を使用した 3D プロットでの画像オーバーレイ。しかし、提供されたコードを実行すると、次のエラーが発生します。

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 を使用しても独自の画像を使用しても、同じエラーが発生します。私が変更できるものについて何か提案はありますか?ありがとう!

4

2 に答える 2

0

エラーは、plot_surface が 'Z' 引数の配列を予期しているが、整数 10 を指定したために発生したようです (したがって、エラー 'int' オブジェクトには属性 'shape' がありません)。

于 2013-07-10T22:01:34.850 に答える
0

画像を正しく読み込んでいread_png()ません。ファイル パスではなく、入力としてファイル オブジェクトが必要です。これを試して:

 f = open('milkyway.png','r')
 img = read_png(f)
于 2013-07-10T22:02:38.810 に答える