用pyplot绘制不等轴上的圆

时间:2012-08-16 20:43:47

标签: python matplotlib

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

ax.get_aspect()

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

auto

这不太有用。您建议在不等轴的情节图上绘制圆形图?

3 个答案:

答案 0 :(得分:15)

这个问题已经超过一年了,但我也有这个问题。我需要在matplotlib图中添加圆圈,我希望能够使用数据坐标在图中指定圆的位置,并且我不希望圆半径随着平移/缩放而变化(或者更糟糕的是圆变为椭圆形)。

我发现的最好和最简单的解决方案是用一个点绘制一条曲线并包含一个圆形标记:

ax.plot(center_x,center_y,'bo',fillstyle='none',markersize=5)

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

答案 1 :(得分:4)

这确实取决于你想要的东西。

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

有几种方法可以解决这个问题。首先,最简单的说,你可以修正纵横比,然后在数据坐标中的圆圈上放一个圆圈:

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()

data coords circle

通过这种方式,您可以按常规进行缩放和平移,但形状将始终为圆形。

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

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()

device coordinates circle

这是相当先进的mpl,但即便如此,我认为它具有相当的可读性。

HTH,

答案 2 :(得分:0)

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

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

其中x和y介于[0和1]之间。此示例将标记放在轴的右上角。