2013-05-10 42 views
3

我目前正在編寫一個程序,它必須生成一組圖。每個圖必須有3個同心圓,其半徑由數據集確定。此外,還必須添加另一個可以具有不同中心的紅色圓圈。但是,我遇到了各種問題。除非圓的半徑太大,否則我應該在圖上看到3個黑色和1個紅色圓圈,但我沒有。Python的Matplotlib模塊的奇怪行爲 - 繪製一個圓

餘中分離的一段代碼,使劇情和在這裏它是 -

import matplotlib.pyplot as plt 

fig1 = plt.figure(1, figsize=(6,6)) 
plt.xlim(-30,30) 
plt.ylim(-30,30) 

rcircle1 = plt.Circle((0,0), 6.0, edgecolor="black", facecolor="white") 
rcircle2 = plt.Circle((0,0), 12.0, edgecolor="black", facecolor="white") 
rcircle3 = plt.Circle((0,0), 18.0, edgecolor="black", facecolor="white") 
bcircle = plt.Circle((8.5,-5.8) ,2, edgecolor="red", facecolor="white") 

ax = fig1.gca() 
ax.add_artist(rcircle1) 
ax.add_artist(rcircle2) 
ax.add_artist(rcircle3) 
ax.add_artist(bcircle) 

fig1.savefig("Model.png", dpi=150) 

對於上面的輸出爲 -

Output of above code.

我試圖尋找到與相關聯的各種類變量Circle()add_artist()但無法找到可能影響此行爲的內容。

我目前的解決辦法是將下面的代碼 -

import numpy as np 
import matplotlib.pyplot as plt 

th = np.arange(-3.14,3.14,0.01) 

fig1 = plt.figure(1,figsize=(6,6)) 
plt.xlim(-30,30) 
plt.ylim(-30,30) 

plt.plot(6*np.cos(th), 6*np.sin(th), color="black") 
plt.plot(12*np.cos(th), 12*np.sin(th), color="black") 
plt.plot(18*np.cos(th), 18*np.sin(th), color="black") 
# (8,5, -5,8) 
plt.plot(2*np.cos(th) + 8.5, 2*np.sin(th) - 5.8, color="red") 

fig1.savefig("Hard.png", dpi=150) 

由上面的代碼生成的輸出正是我想要的!

enter image description here

雖然這個工作,它違背了Circle()像matplotlib方法的目的。任何人都可以評論爲什麼第一個代碼不工作,因爲我期望它是?

回答

6

你的問題是facecolor的說法。你最後添加了最大的圓,它有一個不透明的中心。

在第二個示例中,您正在繪製一條線,而不是「已填充」的圓。

要麼改變你的加入圈子訂單(或提供一個zorder kwarg),或傳遞facecolor='none'(注:這是字符串"none",不是對象None),以得到一個「空缺」圈子。

+0

謝謝喬。解決方案奏效,只是沒有意識到訂單的重要性。我曾嘗試爲「alpha」賦予一個值,但不知何故,這並沒有奏效。我猜「alpha」不適用於這些類型的對象。或者,也許我做錯了什麼。再次感謝。 – Killer 2013-05-10 12:04:37

+0

無論它值多少錢,「alpha」應該可以正常工作。但是,它適用於matplotlib藝術家的填充和輪廓,所以如果設置'alpha = 0',則不會繪製任何東西。很高興你有它的工作,無論如何! – 2013-05-11 23:08:01