📅  最后修改于: 2023-12-03 14:59:26.673000             🧑  作者: Mango
在使用matplotlib绘制3D图时,我们通常使用Axes3D子模块来完成绘制。但是,如果我们尝试在Axes3D中设置aspect参数,就会出现“Axes3D 目前仅支持方面参数“auto”.你通过了“平等”.”这个错误。本文将介绍该错误的原因和解决方法。
在2D图中,我们可以使用plt.gca().set_aspect('equal')来设置x轴和y轴的比例相等,从而得到一个正方形的图像。但是,在3D图中,我们很难同时保证x、y、z三个方向上的比例相等。因此,Axes3D不支持设置aspect参数。
如果我们仍然需要得到比例相等的3D图像,有两种解决方法:
设置x、y、z三个方向上的长度相等。例如,我们可以使用以下代码来绘制一个正方体:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')
cube = Poly3DCollection([[(0, 0, 0), (1, 0, 0), (1, 1, 0), (0, 1, 0)],
[(0, 0, 1), (1, 0, 1), (1, 1, 1), (0, 1, 1)],
[(0, 0, 0), (0, 1, 0), (0, 1, 1), (0, 0, 1)],
[(1, 0, 0), (1, 1, 0), (1, 1, 1), (1, 0, 1)],
[(0, 0, 0), (0, 0, 1), (1, 0, 1), (1, 0, 0)],
[(0, 1, 0), (0, 1, 1), (1, 1, 1), (1, 1, 0)]],
facecolors=['red', 'blue', 'green', 'yellow', 'cyan', 'magenta'], alpha=0.4)
ax.add_collection3d(cube)
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ax.set_zlim([0, 1])
plt.show()
该代码绘制了一个边长为1的正方体。
调整subplot的大小。使用fig.add_subplot()函数创建subplot对象时,可以设置参数aspect='equal',从而得到一个正方形的subplot对象。例如:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, projection='3d', aspect='equal')
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ax.set_zlim([0, 1])
plt.show()
该代码绘制了一个边长为1的立方体。注意,由于我们设置了subplot的大小为6x6英寸,因此需要将坐标轴范围设置为[0, 1]。
Axes3D不支持设置aspect参数。要在3D图中得到比例相等的图形,可以通过设置x、y、z三个方向上的长度相等或者调整subplot的大小来实现。