令 M 和 N 为整数。给定一个大小为 (M,1) 的向量 s、一个大小为 (N,1) 的向量 p 和一个大小为 (M,N) 的矩阵 u0。假设有人想要 3D-plot (s,p) 作为网格和 u0 作为要绘制的函数(z 轴)。当一个人写道: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然而,尺寸确实匹配!有没有一种方法的3D绘制在网格U0(S,P),而不使用人气指数函数的网格(CF在太多复发例如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()
添加回答
举报
0/150
提交
取消