0

500x500 の強度値を含むテキスト ファイルがあります。Python-XY を使用して、このデータの 3D プロットを作成しようとしています。この 500x500 配列の特定の部分のみをプロットすることを意図しています (235:268、210:280)。

以下は、これまでの Python-XY コードの多くの試みの 1 つです。

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')

data = np.genfromtxt('Fig2.txt')

X = np.linspace(235,268,num=33)
Y = np.linspace(210,280,num=70)
x,y = np.meshgrid (X,Y)
Z = data[235:268,210:280]

ax.plot_surface(x,y,Z, rstride=1, cstride=1, cmap=cm.jet)

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

このプロットを作成するためにさまざまなコードを試しましたが、特定のエラーが発生し続けます。

ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 0.

これは、X 軸と Y 軸に互換性がないことを示していると思いますが、その理由はわかりません。ここで特に間違っているところはありますか?

4

1 に答える 1

1

3 つの軸に多数の点をプロットするには、各点に x、y、z の値が必要です。たとえば、10 個の点をプロットする場合、渡す 3 つのリストplot_surface(x、y、z 軸ごとに 1 つ) には、10、10、および 10 の値が含まれている必要があります。これにより、10 点すべての x、y、および z 値が得られます。xyおよびZリストの要素数が同じではありません。一部のポイントには y 値がありますが、x 値はありません。

を呼び出す前にplot_surface、次のコード行を挿入してみてください。

print len(x), len(y), len(Z)

これら 3 つの値は等しい必要があります。

于 2015-11-06T22:18:59.950 に答える