令 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 math
from math import *
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from pylab import plot, axis, savefig, show, title, meshgrid, cm, imshow, contour, clabel, colorbar
from numpy import exp
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#
M = 10
N = 20
h = 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*h
for 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()
相关分类