试图从二维数组中绘制 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)

输出: