绘制一个圆圈matplotlib

时间:2014-03-31 07:29:15

标签: python matplotlib plot geometry

我正在尝试在网格上绘制一个圆圈。我写的代码如下:

import pyplot as plt
from pyplot import Figure, subplot

fig=plt.figure(1)
plt.axis([0,400,0,400])
ax=fig.add_subplot(1,1,1)
circ=plt.Circle((200,200), radius=10, color='g', fill=False)
ax.add_patch(circ)
plt.show()

现在,我希望圆的中心是图的中心,即本例中的(200,200)。在其他情况下,我希望它根据我们设置的尺寸自动选择中心。这可能在某种程度上吗?

为了更清楚,我想获得x轴和y轴范围,以便找到网格的中点。我该怎么办?

2 个答案:

答案 0 :(得分:4)

您的x轴和y轴范围在您的代码中:

plt.axis([0,400,0,400])

所以你需要的就是利用这一点:

x_min = 0
x_max = 400
y_min = 0
y_max = 400

circle_x = (x_max-x_min)/2.
circle_y = (y_max-y_min)/2.

circ=plt.Circle((circle_x,circle_y), radius=10, color='g', fill=False)

如果要从命令提示符中捕获x_min等,请读出sys.argv

答案 1 :(得分:0)

您想要的是ax.transAxes,这里是坐标转换的tutorial

ax.transAxes表示轴的坐标系; (0,0)位于轴的左下方,(1,1)位于轴的右上方。

fig=plt.figure(1)
plt.axis([0,400,0,400])
ax=fig.add_subplot(1,1,1)
circ=plt.Circle((0.5,0.5), radius=0.2, color='g', fill=False,transform=ax.transAxes)
ax.add_patch(circ)
plt.show()

请注意,半径也会转换为Axes坐标。如果指定的半径大于sqrt(2)/ 2(约0.7),则图中不会显示任何内容。

如果你想绘制一组圆圈,那么使用函数circles here会更简单。对于这个问题,

fig=plt.figure(1)
plt.axis([0,400,0,400])
ax=fig.add_subplot(1,1,1)
circles(0.5, 0.5, 0.2, c='g', ax=ax, facecolor='none', transform=ax.transAxes)
plt.show()

如果你想在你的图中看到一个真正的圆圈(而不是椭圆),你应该使用

ax=fig.add_subplot(1,1,1, aspect='equal')

或类似的东西。