用pyplot在不等轴上绘制圆


问题内容

我想在自动缩放的pyplot生成的图形上绘制一个圆。当我跑步时

ax.get_aspect()

希望得到一个可以操纵椭圆轴的值,pyplot返回:

auto

这没什么用。您建议用什么方法在不等轴的pyplot图上绘制圆?


问题答案:

它确实确实取决于您想要什么。

当纵横比为自动时,在数据坐标中定义圆的问题是您将能够调整图形(或其窗口)的大小,并且数据比例会很好地拉伸。不幸的是,这也意味着您的圆不再是圆,而是椭圆。

有几种解决方法。首先,最简单地说,您可以固定长宽比,然后在数据坐标上的圆上画一个圆:

import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure()
ax = plt.axes()

ax.set_aspect(1)
theta = np.linspace(-np.pi, np.pi, 200)
plt.plot(np.sin(theta), np.cos(theta))

plt.show()

数据坐标圈

这样,您将可以照常缩放和平移,但是形状始终是一个圆形。

如果您只想在图形上放置一个独立于数据坐标的圆,这样轴的平移和缩放不会影响圆上的位置和缩放,那么您可以执行以下操作:

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure()
ax = plt.axes()
patch = mpatches.Circle((325, 245), 180, alpha=0.5, transform=None)
fig.artists.append(patch)


plt.show()

设备坐标圆

这是相当先进的mpl,但即使这样,我也认为它可读性强。

HTH,