2013-10-02 213 views
3

我想繪製遠離源的一組給定距離的同心圓。我試圖做的第一件事是畫在極座標圖的弧,因爲這似乎是一個合乎邏輯的子步驟:matplotlib:如何在一組給定的半徑處繪製同心圓

import numpy as np 
import matplotlib.pyplot as plt 
fig = plt.figure() 
ax = fig.add_subplot(111, polar=True) 
ax.plot([1.0,1.5], [5,5], color='r', linestyle='-') 
plt.show() 

我遇到的第一個問題是,這畫一條直線,而不是弧:

polar with straight line

所以subquestion可能是如何在極座標圖中劃出一道弧線,在這種情況下,一個360度的弧線,在給定的範圍?。另一方面,可能會有更好的解決方案,也許不涉及極地情節。最終,根據標題,我的目標是以中心源周圍的一組半徑繪製同心圓。

回答

5

方便,用它做靶子的所有時間:

ax.plot(np.linspace(0, 2*np.pi, 100), np.ones(100)*5, color='r', linestyle='-') 

試想你是​​如何定義的極軸圈?需要兩件事情,角度和半徑。這裏是np.linspace(0, 2*np.pi, 100)np.ones(100)*5。如果你只需要一個弧,將第一個參數改爲小於0到2pi。並相應地更改第二個參數。

enter image description here 還有其他的方法可以做到這一點。 plot()創建.lines.Line2D object對象,如果你想.collections.PathCollection object代替的Line2D:

ax.scatter(1, 0, s=100000, facecolors='none') 

或者你想patch ES:

ax.bar(0, 5, 2*np.pi, bottom=0.0, facecolor='None') #need to modified the edge lines or won't look right 
+0

似乎是一個公平的解決方案。我認爲這實際上是通過繪製大量(100)小直線段而非圓弧本身來工作的?它可能不會在實踐中出現問題,但如果繪製圓弧的方法具體確實存在或不存在,那麼很容易知道。 –

+1

@Bryce Thomas,如果你想在笛卡兒座標系中繪製'y = sin(x)',你會在'matplotlib'中做什麼,幾乎是一回事?現在,如果你討厭這個問題,還有其他方法可以做到,我剛剛添加了。 –