使用pyplot在不同轴上绘制圆形。

12

我想在由pyplot自动生成的图形上绘制一个圆。当我运行以下代码时

ax.get_aspect()

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

auto

这并不太有用。你会建议使用哪些方法在pyplot图上绘制一个轴不相等的圆?


显然的n00b-lution是绘制椭圆并手动调整它们以使其类似于圆形。一定有更符合Python风格的方法... - benkay
需要使用数据坐标吗? - pelson
我不是很精通,无法真正理解你的问题。对于这个问题,没有任何“要求”,所以我想一个点的轨迹看起来与图中给定点等距离(有点数学意味)应该完全足够了。 - benkay
3个回答

21
这个问题已经超过一年了,但我也有这个问题。 我需要在matplotlib图中添加圆,并希望能够使用数据坐标指定圆的位置,而且我不希望圆的半径随着平移/缩放而改变(更糟糕的是圆会变成椭圆)。
我发现的最好和最简单的解决方案是在曲线上绘制一个单点,并包含一个圆形的标记:
ax.plot(center_x,center_y,'bo',fillstyle='none',markersize=5)

这将给出一个漂亮的、固定大小的蓝色圆圈,没有填充!


6

这真的取决于你想要什么。

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

有几种解决方法。首先,最简单的方法是固定您的纵横比,然后在数据坐标中在图表上放置一个圆:

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,但即使如此,我认为它还是相当易读的。

希望对您有所帮助,


1
我想要在自动选择的数据系列中绘制围绕点的圆。这就像第3种情况,我希望轴比例尺浮动,并且我希望圆始终显示为圆形,但缩放和平移也会影响圆。在接下来的一天左右,我将尝试将您上面的mpl代码入侵到我的应用程序中,因此虽然我目前无法验证您的答案是否解决了我的问题,但检查已经寄出(关于Stack Overflow界面的一个非常糟糕的玩笑)。 - benkay

0

在 @user3208430 的基础上,如果您希望圆圈始终出现在轴上的相同位置(无论数据范围如何),则可以使用轴坐标通过 transform 来定位:

ax.plot(.94, .94, 'ro', fillstyle='full', markersize=5, transform=ax.transAxes)

其中 x 和 y 均在 [0,1] 范围内。本示例将标记放置于坐标轴的右上角。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接