试图从二维数组中绘制 surf3d
Trying to plot surf3d from 2d array
我是 python 的新手,我正在尝试从 2D 阵列制作 3D 表面,但似乎出现错误:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
这是我的完整代码
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def fourier(delX,delT):
xMax = 10
tMax = 12
m = int(xMax/delX)
n = int(tMax/delT)
l = 0.020875
t = 0.0
Matrix =[[0 for x in range(m+1)]for y in range(n+1)]
for x in range(n+1):
Matrix[x][0] = 100
Matrix[x][5] = 50
for x in range(n):
Matrix[x+1][1] = Matrix[x][1]+l*(Matrix[x][2]-2*Matrix[x][1]+Matrix[x][0])
Matrix[x+1][2] = Matrix[x][2]+l*(Matrix[x][3]-2*Matrix[x][2]+Matrix[x][1])
Matrix[x+1][3] = Matrix[x][3]+l*(Matrix[x][4]-2*Matrix[x][3]+Matrix[x][2])
Matrix[x+1][4] = Matrix[x][4]+l*(Matrix[x][5]-2*Matrix[x][4]+Matrix[x][3])
X = np.arange(0,xMax+0.1,delX)
Y = np.arange(0,tMax+0.1,delT)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Matrix,cmap=cm.coolwarm,linewidth=0,antialiased=False)
ax.set_zlim(0,101)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
是什么导致形状不匹配以及如何解决错误?
plot_surface 函数要求 X、Y、Z 为二维数组,为此它使用 meshgrid 函数将 X 和 Y 从一维转换为二维。
X, Y = np.meshgrid(X, Y)
完整代码:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def fourier(delX,delT):
xMax = 10
tMax = 12
m = int(xMax/delX)
n = int(tMax/delT)
l = 0.020875
t = 0.0
Matrix =[[0 for x in range(m+1)]for y in range(n+1)]
for x in range(n+1):
Matrix[x][0] = 100
Matrix[x][5] = 50
for x in range(n):
Matrix[x+1][1] = Matrix[x][1]+l*(Matrix[x][2]-2*Matrix[x][1]+Matrix[x][0])
Matrix[x+1][2] = Matrix[x][2]+l*(Matrix[x][3]-2*Matrix[x][2]+Matrix[x][1])
Matrix[x+1][3] = Matrix[x][3]+l*(Matrix[x][4]-2*Matrix[x][3]+Matrix[x][2])
Matrix[x+1][4] = Matrix[x][4]+l*(Matrix[x][5]-2*Matrix[x][4]+Matrix[x][3])
X = np.arange(0,xMax+0.1,delX)
Y = np.arange(0,tMax+0.1,delT)
X, Y = np.meshgrid(X, Y)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Matrix,cmap=cm.coolwarm,linewidth=0,antialiased=False)
ax.set_zlim(0,101)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
fourier(0.5, 0.5)
输出:
我是 python 的新手,我正在尝试从 2D 阵列制作 3D 表面,但似乎出现错误:
ValueError: shape mismatch: objects cannot be broadcast to a single shape
这是我的完整代码
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def fourier(delX,delT):
xMax = 10
tMax = 12
m = int(xMax/delX)
n = int(tMax/delT)
l = 0.020875
t = 0.0
Matrix =[[0 for x in range(m+1)]for y in range(n+1)]
for x in range(n+1):
Matrix[x][0] = 100
Matrix[x][5] = 50
for x in range(n):
Matrix[x+1][1] = Matrix[x][1]+l*(Matrix[x][2]-2*Matrix[x][1]+Matrix[x][0])
Matrix[x+1][2] = Matrix[x][2]+l*(Matrix[x][3]-2*Matrix[x][2]+Matrix[x][1])
Matrix[x+1][3] = Matrix[x][3]+l*(Matrix[x][4]-2*Matrix[x][3]+Matrix[x][2])
Matrix[x+1][4] = Matrix[x][4]+l*(Matrix[x][5]-2*Matrix[x][4]+Matrix[x][3])
X = np.arange(0,xMax+0.1,delX)
Y = np.arange(0,tMax+0.1,delT)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Matrix,cmap=cm.coolwarm,linewidth=0,antialiased=False)
ax.set_zlim(0,101)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
是什么导致形状不匹配以及如何解决错误?
plot_surface 函数要求 X、Y、Z 为二维数组,为此它使用 meshgrid 函数将 X 和 Y 从一维转换为二维。
X, Y = np.meshgrid(X, Y)
完整代码:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.ticker import LinearLocator, FormatStrFormatter
def fourier(delX,delT):
xMax = 10
tMax = 12
m = int(xMax/delX)
n = int(tMax/delT)
l = 0.020875
t = 0.0
Matrix =[[0 for x in range(m+1)]for y in range(n+1)]
for x in range(n+1):
Matrix[x][0] = 100
Matrix[x][5] = 50
for x in range(n):
Matrix[x+1][1] = Matrix[x][1]+l*(Matrix[x][2]-2*Matrix[x][1]+Matrix[x][0])
Matrix[x+1][2] = Matrix[x][2]+l*(Matrix[x][3]-2*Matrix[x][2]+Matrix[x][1])
Matrix[x+1][3] = Matrix[x][3]+l*(Matrix[x][4]-2*Matrix[x][3]+Matrix[x][2])
Matrix[x+1][4] = Matrix[x][4]+l*(Matrix[x][5]-2*Matrix[x][4]+Matrix[x][3])
X = np.arange(0,xMax+0.1,delX)
Y = np.arange(0,tMax+0.1,delT)
X, Y = np.meshgrid(X, Y)
fig = plt.figure()
ax = fig.gca(projection='3d')
surf = ax.plot_surface(X,Y,Matrix,cmap=cm.coolwarm,linewidth=0,antialiased=False)
ax.set_zlim(0,101)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
fourier(0.5, 0.5)
输出: