私はmatplotlibで2つのパラメータの関数をプロットしています。私はmatplotlibチュートリアルの例をコピーして、私自身の入力データでベクトルXとY(同じく-3:3のスペース番号)とZ =ピーク(X、Y)を変換しました。なにが問題ですか?Matplotlib 3Dプロット - 入力データの2D形式ですか?
def peaks(x,y):
xsq=x**2
ysq=y**2
xsq_one=(x+1)**2
ysq_one=(y+1)**2
m1=3*(1-x)**2
m2=10*(x/5-x**3-y**5)
m3=1/3
return m1*numpy.exp(-xsq-ysq_one)-m2*numpy.exp(-xsq-ysq)-m3*numpy.exp(-xsq_one-ysq)
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
X=Y=numpy.arange(-3,3,0.01).tolist()
Z=[]
for i in range(len(X)):
Z.append(peaks(X[i],Y[i]))
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contour(X, Y, Z, zdir='z', offset=-100)
cset = ax.contour(X, Y, Z, zdir='x', offset=-40)
cset = ax.contour(X, Y, Z, zdir='y', offset=40)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)
plt.show()
ありがとうございました!
でなければなりませんか? – joaquin
TypeError:入力zは2D配列でなければなりません。 ...関数の評価は1D ... – octoback