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

使用plot_wireframe绘制立方体报错:'list' object has no attribute 'ndim'

解决3D线框绘制错误的方案

错误原因

ax.plot_wireframe()对输入数据有两个硬性要求:

  1. 必须是numpy数组(而非Python普通列表)
  2. 必须是2维结构(线框需要网格状数据生成曲面的行和列)
    你当前的X/Y/Z是1维Python列表,既没有numpy数组的ndim属性,也不符合2维数据要求,因此触发错误。

两种可行解决方案

方案1:构造2D网格数据,使用plot_wireframe

通过生成立方体各面的网格数据,满足plot_wireframe的输入要求:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 定义立方体的顶点取值
x = np.array([0, 1])
y = np.array([0, 1])

# 绘制底面(z=0)
X_bottom, Y_bottom = np.meshgrid(x, y)
Z_bottom = np.zeros_like(X_bottom)
ax.plot_wireframe(X_bottom, Y_bottom, Z_bottom)

# 绘制顶面(z=1)
X_top, Y_top = np.meshgrid(x, y)
Z_top = np.ones_like(X_top)
ax.plot_wireframe(X_top, Y_top, Z_top)

# 绘制前面(y=0)
X_front, Z_front = np.meshgrid(x, [0,1])
Y_front = np.zeros_like(X_front)
ax.plot_wireframe(X_front, Y_front, Z_front)

# 绘制后面(y=1)
X_back, Z_back = np.meshgrid(x, [0,1])
Y_back = np.ones_like(X_back)
ax.plot_wireframe(X_back, Y_back, Z_back)

# 绘制左面(x=0)
Y_left, Z_left = np.meshgrid(y, [0,1])
X_left = np.zeros_like(Y_left)
ax.plot_wireframe(X_left, Y_left, Z_left)

# 绘制右面(x=1)
Y_right, Z_right = np.meshgrid(y, [0,1])
X_right = np.ones_like(Y_right)
ax.plot_wireframe(X_right, Y_right, Z_right)

plt.show()

方案2:基于现有顶点,用plot3D绘制边

直接利用你已有的8个顶点,定义立方体的12条边后逐个绘制,逻辑更直观:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 原有的8个立方体顶点
X = [0, 1, 1, 0, 0, 1, 1, 0]
Y = [0, 0, 1, 1, 0, 0, 1, 1]
Z = [0, 0, 0, 0, 1, 1, 1, 1]

# 定义立方体的12条边(每个元素是两个顶点的索引)
edges = [
    (0,1), (1,2), (2,3), (3,0),  # 底面边
    (4,5), (5,6), (6,7), (7,4),  # 顶面边
    (0,4), (1,5), (2,6), (3,7)   # 垂直边
]

# 循环绘制每条边
for i, j in edges:
    ax.plot3D([X[i], X[j]], [Y[i], Y[j]], [Z[i], Z[j]], 'blue')

# 添加坐标轴标签(可选)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()

方案对比

  • 方案1贴合plot_wireframe的设计逻辑,适合绘制曲面类线框
  • 方案2直接复用你现有的顶点数据,代码更简洁,适合绘制多面体框架

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:44