如何在 matplotlib 中要求等轴

How to require equal axes in matplotlib

我习惯于使用 python 的一个版本,其中下面的代码生成了精确的比例轴。

    plt.ylabel("y(Km)")
    plt.gca().set_aspect('equal')
    ax = plt.axes()
    ax.set_facecolor("black")
    circle = Circle((0, 0), 2, color='dimgrey')
    plt.gca().add_patch(circle)
    plt.axis([-1 / u1 , 1 / u1 , -1 / u1 , 1 / u1 ])

当我切换计算机并开始使用 python 3.7 时,相同的代码开始生成取消配置的图片。为什么会发生这种情况,我该如何解决?前后照片如下。

您的代码正在创建两个重叠轴(如您在第二张图片中的红色圆圈中指出的那样)。您还可以通过 运行 代码末尾的以下行看到这一点:

print(plt.gcf().get_axes()) # (get current figure)

给出:

[<AxesSubplot:ylabel='y(Km)'>, <AxesSubplot:>]

发生这种情况是因为当您已经有一个轴时,您在 ax = plt.axes() 行添加了另一个轴。来自 documentation:

Add an axes to the current figure and make it the current axes.

也许你的意思是 ax = plt.gca()

无论如何,整理代码:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle

u1 = 0.05

fig, ax = plt.subplots() # figure fig with one axes object ax
ax.set_facecolor("black")
ax.set_aspect("equal")
circle = Circle((0, 0), 2, color='dimgrey')
ax.add_patch(circle)
ax.set_xlim([-1 / u1, 1 / u1 ])
ax.set_ylim([-1 / u1, 1 / u1 ])
ax.set_ylabel("y (km)")

print(fig.get_axes()) # not needed for anything, just for comparison with original code

plt.show()

应该给出: