Python调用plot_wireframe报错:list对象无ndim属性
3D绘图报错解决方法
错误原因
plot_wireframe函数要求传入的X、Y、Z必须是二维numpy数组,而你用的是普通Python列表,既没有ndim属性,也不符合线框绘图需要的网格数据格式。另外,你当前的X、Y、Z只是3个离散点,根本不足以生成线框(线框需要网格状的数据集)。
解决方案
情况1:绘制离散3D点
如果你的需求是展示这几个离散点,不要用plot_wireframe,改用plot3D或scatter3D:
from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as pt import numpy as np fig = pt.figure() chart = fig.add_subplot(1,1,1,projection = "3d") X,Y,Z = [3,15,23],[7,9,23],[7,10,19] # 绘制带标记点的连线 chart.plot3D(X,Y,Z, marker='o') # 或者单独绘制散点 # chart.scatter3D(X,Y,Z, color='r') pt.show()
情况2:正确绘制3D线框
如果确实需要绘制线框,需要准备网格数据,示例如下:
from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as pt import numpy as np fig = pt.figure() chart = fig.add_subplot(1,1,1,projection = "3d") # 生成网格状的X、Y数据 X, Y = np.meshgrid(np.linspace(-5,5,20), np.linspace(-5,5,20)) # 计算对应网格的Z值(这里用一个简单的曲面公式) Z = np.sin(np.sqrt(X**2 + Y**2)) # 绘制线框 chart.plot_wireframe(X,Y,Z) pt.show()
包版本检查与更新
- 检查当前matplotlib版本:
import matplotlib print(matplotlib.__version__) - 更新matplotlib到最新版:
在终端执行命令:pip install --upgrade matplotlib
内容的提问来源于stack exchange,提问作者Kyno50
相关产品推荐
相关产品推荐

