如何在 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()
应该给出:
我习惯于使用 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()
应该给出: