我想在自动缩放的 pyplot 生成的图形上绘制一个圆圈。当我跑
ax.get_aspect()
希望有一个值可以用来操纵椭圆的轴,pyplot 返回:
auto
这不太有用。您建议在不等轴的 pyplot 图上绘制圆的方法是什么?
我想在自动缩放的 pyplot 生成的图形上绘制一个圆圈。当我跑
ax.get_aspect()
希望有一个值可以用来操纵椭圆的轴,pyplot 返回:
auto
这不太有用。您建议在不等轴的 pyplot 图上绘制圆的方法是什么?
这个问题已经有一年多了,但我也有这个问题。我需要将圆添加到 matplotlib 图中,并且我希望能够使用数据坐标指定圆在图中的位置,并且我不希望圆半径随着平移/缩放而改变(或者更糟的是圆变成了椭圆)。
我发现的最好和最简单的解决方案是简单地绘制一条带有单点的曲线并包含一个圆形标记:
ax.plot(center_x,center_y,'bo',fillstyle='none',markersize=5)
这给出了一个漂亮的、固定大小的蓝色圆圈,没有填充!
这确实取决于您想要它的用途。
当纵横比为自动时,在数据坐标中定义一个圆圈的问题在于,您将能够调整图形(或其窗口)的大小,并且数据比例会很好地拉伸。不幸的是,这也意味着您的圆不再是圆,而是椭圆。
有几种方法可以解决这个问题。首先,也是最简单的,您可以修复纵横比,然后在数据坐标中的绘图上画一个圆圈:
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,但即便如此,我认为它还是相当可读的。
高温下,
在@user3208430 的基础上,如果您希望圆始终出现在轴中的同一位置(无论数据范围如何),您可以通过transform使用轴坐标定位它:
ax.plot(.94, .94, 'ro', fillstyle='full', markersize=5, transform=ax.transAxes)
其中 x 和 y 介于 [0 和 1] 之间。此示例将标记放置在坐标区的右上角。