2014-03-31 128 views
1

我想繪製一個圓形的網格。我已經編寫的代碼如下:繪製一個圓-matplotlib

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

現在,我想圓的中心是該圖的中心,即,(200200)在這個例子。在其他情況下,我希望它根據我們設定的尺寸自動選擇中心。這可以以某種方式嗎?

爲了讓它更清晰,我想獲得x軸和y軸範圍以找到網格的中點。我如何繼續?

回答

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

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

請注意,半徑也轉換爲軸座標。如果指定的半徑大於sqrt(2)/ 2(大約0.7),則在該圖中不會看到任何內容。

如果要繪製一組圓圈,使用函數circleshere會更簡單。對於這個問題,

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

或類似的東西。