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
相关产品推荐
相关产品推荐

