在 python 中绘制 3d 表面时出现问题
Issue in plotting 3d surface in python
我有以下数据,试图绘制 3d 表面。
data = [[10, 10, 0.84496124031007758],
[10, 20, 0.87209302325581395],
[10, 30, 0.88139534883720927],
[20, 10, 0.86201550387596892],
[20, 20, 0.87441860465116272],
[20, 30, 0.88992248062015500],
[30, 10, 0.87984496124031009],
[30, 20, 0.89922480620155043],
[30, 30, 0.92015503875968996]]
x, y, z = zip(*data)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
plt.show()
我正在检索以下错误,
File "C:/Users/40227422/PycharmProjects/VideoDetection.py", line 29, in <module>
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
File "C:\Users227422\AppData\Local\Continuum\miniconda3\envs\tensorflow\lib\site-
packages\mpl_toolkits\mplot3d\axes3d.py", line 1496, in plot_surface
if Z.ndim != 2:
AttributeError: 'tuple' object has no attribute 'ndim'
提前致谢
Axes3D.plot_surface
的前三个参数都需要是二维数组
将您的呼叫替换为以下内容即可:
ax.plot_surface(np.array(x).reshape(3,3), np.array(y).reshape(3,3), np.array(z).reshape(3,3), cmap='viridis', edgecolor='none')
或者用列表推导+解构:
ax.plot_surface(*[np.array(d).reshape(3,3) for d in zip(*data)], cmap='viridis', edgecolor='none')
我有以下数据,试图绘制 3d 表面。
data = [[10, 10, 0.84496124031007758],
[10, 20, 0.87209302325581395],
[10, 30, 0.88139534883720927],
[20, 10, 0.86201550387596892],
[20, 20, 0.87441860465116272],
[20, 30, 0.88992248062015500],
[30, 10, 0.87984496124031009],
[30, 20, 0.89922480620155043],
[30, 30, 0.92015503875968996]]
x, y, z = zip(*data)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
plt.show()
我正在检索以下错误,
File "C:/Users/40227422/PycharmProjects/VideoDetection.py", line 29, in <module>
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
File "C:\Users227422\AppData\Local\Continuum\miniconda3\envs\tensorflow\lib\site-
packages\mpl_toolkits\mplot3d\axes3d.py", line 1496, in plot_surface
if Z.ndim != 2:
AttributeError: 'tuple' object has no attribute 'ndim'
提前致谢
Axes3D.plot_surface
的前三个参数都需要是二维数组
将您的呼叫替换为以下内容即可:
ax.plot_surface(np.array(x).reshape(3,3), np.array(y).reshape(3,3), np.array(z).reshape(3,3), cmap='viridis', edgecolor='none')
或者用列表推导+解构:
ax.plot_surface(*[np.array(d).reshape(3,3) for d in zip(*data)], cmap='viridis', edgecolor='none')