You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用Matplotlib的plot_trisurf绘制二维数组报错求助

解决plot_trisurf绘制二维数组的报错问题

你遇到的核心问题是plot_trisurf要求X、Y、Z参数必须是长度一致的一维数组,你之前只展平了X和Y,但data仍然是二维数组,导致索引越界错误。

修正步骤

把data也展平成一维数组,和X、Y的长度保持一致即可:

替换原来的plot_trisurf调用代码为:

ax.plot_trisurf(X.flatten(), Y.flatten(), data.flatten(), cmap=cm.Spectral, linewidth=1)

完整可运行代码

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

frames = []
for _ in range(5):
    matrix = np.array([
            [np.random.normal(20, 3) for _ in range(6)] 
            for _ in range(6)
        ], 
        dtype = np.float32
    )   
    frames.append(matrix)

fig= plt.figure(figsize = [6, 5], dpi = 100) 
        
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.set_zlim(10, 30)

data = frames[0]    
X, Y = np.meshgrid(
    range(len(frames[0])),
    range(len(frames[0][0]))
)  
# 修正后的plot_trisurf调用
ax.plot_trisurf(X.flatten(), Y.flatten(), data.flatten(), cmap=cm.Spectral, linewidth=1)
plt.show()

错误原因解释

  • 第一次报错是因为plot_trisurf不接受二维的X、Y数组,必须转为一维。
  • 第二次报错是因为你只展平了X和Y,但data还是二维的。plot_trisurf内部会自动生成三角剖分的索引,这些索引是针对一维数组的,用一维索引去访问二维数组的行时,就会出现"索引超出边界"的错误——比如索引6对应二维数组的第7行,但你的data只有6行(6x6的矩阵),所以触发IndexError。

内容的提问来源于stack exchange,提问作者hexaquark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:25:20