mplot3d python 尺寸不兼容错误
mplot3d python incompatible dimensions error
我正在尝试使用 python mplot3d 在 3D 中绘制 2D 数组,但是我收到关于轴 1 上不兼容维度的错误
我看过其他问题,其中的答案建议使用 meshgrid,但我已经在使用它,但仍然出现错误,我的 X 和 Y 范围也乘以 Z 值的数量。
这是我的代码:
def view_3d(map3d):
fig = plt.figure()
ax = fig.gca(projection='3d')
X = []
Y = []
Z = []
for wid in range(len(map3d)):
X.append(wid)
for hi in range(len(map3d[wid])):
if wid is 0:
Y.append(hi)
Z.append(map3d[wid][hi])
print(len(X), len(Y), len(Z))
X = np.array(X)
Y = np.array(Y)
X2, Y2 = np.meshgrid(X, Y)
Z = np.array(Z)
print(len(X2),len(Y2),len(Z))
print(len(X2[0]), len(Y2[0]))
surf = ax.plot_surface(X2, Y2, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
传递的二维数组 (map3d) 的长度为 566×566
打印语句只是为了确认数组的长度
错误是:
Traceback (most recent call last):
File "__init__.py", line 199, in <module>
view_3d(map_results)
File "__init__.py", line 163, in view_3d
linewidth=0, antialiased=False)
File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1564, in plot_surface
X, Y, Z = np.broadcast_arrays(X, Y, Z)
File "C:\Python27\lib\site-packages\numpy\lib\stride_tricks.py", line 101, in broadcast_arrays
"incompatible dimensions on axis %r." % (axis,))
ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1.
A google 驱动 link 到 运行 代码所需的代码和图像,查看错误如下:
https://drive.google.com/folderview?id=0B2ssDQewnhReWGJZYXZRSXNxRFU&usp=sharing
感谢所有帮助,
谢谢
您的 Z
数组必须与 X2,Y2
具有相同的形状才能使 plot_surface
正常工作。
所以我改变了行
Z = np.array(Z)
到
Z = np.array(Z).reshape(Y.size,X.size)
成功了!
我正在尝试使用 python mplot3d 在 3D 中绘制 2D 数组,但是我收到关于轴 1 上不兼容维度的错误 我看过其他问题,其中的答案建议使用 meshgrid,但我已经在使用它,但仍然出现错误,我的 X 和 Y 范围也乘以 Z 值的数量。 这是我的代码:
def view_3d(map3d):
fig = plt.figure()
ax = fig.gca(projection='3d')
X = []
Y = []
Z = []
for wid in range(len(map3d)):
X.append(wid)
for hi in range(len(map3d[wid])):
if wid is 0:
Y.append(hi)
Z.append(map3d[wid][hi])
print(len(X), len(Y), len(Z))
X = np.array(X)
Y = np.array(Y)
X2, Y2 = np.meshgrid(X, Y)
Z = np.array(Z)
print(len(X2),len(Y2),len(Z))
print(len(X2[0]), len(Y2[0]))
surf = ax.plot_surface(X2, Y2, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
传递的二维数组 (map3d) 的长度为 566×566
打印语句只是为了确认数组的长度
错误是:
Traceback (most recent call last):
File "__init__.py", line 199, in <module>
view_3d(map_results)
File "__init__.py", line 163, in view_3d
linewidth=0, antialiased=False)
File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 1564, in plot_surface
X, Y, Z = np.broadcast_arrays(X, Y, Z)
File "C:\Python27\lib\site-packages\numpy\lib\stride_tricks.py", line 101, in broadcast_arrays
"incompatible dimensions on axis %r." % (axis,))
ValueError: shape mismatch: two or more arrays have incompatible dimensions on axis 1.
A google 驱动 link 到 运行 代码所需的代码和图像,查看错误如下: https://drive.google.com/folderview?id=0B2ssDQewnhReWGJZYXZRSXNxRFU&usp=sharing
感谢所有帮助, 谢谢
您的 Z
数组必须与 X2,Y2
具有相同的形状才能使 plot_surface
正常工作。
所以我改变了行
Z = np.array(Z)
到
Z = np.array(Z).reshape(Y.size,X.size)
成功了!