📜  Axes3D 目前仅支持方面参数“auto”.你通过了“平等”. - 打字稿(1)

📅  最后修改于: 2023-12-03 14:59:26.673000             🧑  作者: Mango

Axes3D 目前仅支持方面参数“auto”.你通过了“平等”.

介绍

在使用matplotlib绘制3D图时,我们通常使用Axes3D子模块来完成绘制。但是,如果我们尝试在Axes3D中设置aspect参数,就会出现“Axes3D 目前仅支持方面参数“auto”.你通过了“平等”.”这个错误。本文将介绍该错误的原因和解决方法。

原因

在2D图中,我们可以使用plt.gca().set_aspect('equal')来设置x轴和y轴的比例相等,从而得到一个正方形的图像。但是,在3D图中,我们很难同时保证x、y、z三个方向上的比例相等。因此,Axes3D不支持设置aspect参数。

解决方法

如果我们仍然需要得到比例相等的3D图像,有两种解决方法:

  1. 设置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的正方体。

  2. 调整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的大小来实现。