令 M 和 N 為整數(shù)。給定一個大小為 (M,1) 的向量 s、一個大小為 (N,1) 的向量 p 和一個大小為 (M,N) 的矩陣 u0。假設(shè)有人想要 3D-plot (s,p) 作為網(wǎng)格和 u0 作為要繪制的函數(shù)(z 軸)。當(dāng)一個人寫道:fig = plt.figure()ax = fig.gca(projection='3d')surf = ax.plot_surface(s, p, u0, cmap=cm.coolwarm, linewidth=0, antialiased=False)fig.colorbar(surf, shrink=0.5, aspect=5)plt.show()終端顯示以下錯誤消息:ValueError: shape mismatch: objects cannot be broadcast to a single shape然而,尺寸確實(shí)匹配!有沒有一種方法的3D繪制在網(wǎng)格U0(S,P),而不使用人氣指數(shù)函數(shù)的網(wǎng)格(CF在太多復(fù)發(fā)例如https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#d- 3d 繪圖)?編輯:這里有一個 MCVE。最初的問題正是以下示例遇到的問題。import mathfrom math import *from mpl_toolkits.mplot3d import Axes3Dimport numpy as npfrom pylab import plot, axis, savefig, show, title, meshgrid, cm, imshow, contour, clabel, colorbarfrom numpy import expimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D#M = 10N = 20h = 1/float(M)l = 1/float(N)#s = np.zeros((M + 1, 1))p = np.zeros((N + 1, 1))for j in range(0, M + 1): s[j] = 0.0 + 5.0*j*hfor k in range(0, N + 1): p[k] = 0.0 + 20.0*k*l#u0 = np.zeros((M + 1, N + 1))for j in range(0, M): for k in range(0, N): u0[j, k] = exp(-(s[j] + p[k] - 10)**2)#fig = plt.figure()ax = fig.gca(projection='3d')surf = ax.plot_surface(p, s, u0, cmap=cm.coolwarm, linewidth=0, antialiased=False)fig.colorbar(surf, shrink=0.5, aspect=5)plt.show()
添加回答
舉報(bào)
0/150
提交
取消