我正在尝试在网格上绘制一个圆圈。我写的代码如下:
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轴范围,以便找到网格的中点。我该怎么办?
答案 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')
或类似的东西。