2017-04-20 123 views
2

我想要爲邊緣顏色繪製散點圖,但沒有使用facecolors。 當我使用facecolor='None'時,它不起作用。Matplotlib:邊緣顏色的散點圖,但沒有facecolor

import numpy as np 
import matplotlib.pyplot as plt 


N = 50 
x = np.random.rand(N) 
y = np.random.rand(N) 
colors = np.random.rand(N) 
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radii 

plt.scatter(x, y, s=area,c=colors,facecolors='None',cmap="gist_rainbow", alpha=0.5) 
plt.show() 

任何解決方案?

回答

1

c參數將同時影響facecolor和edgecolor,因此參數facecoloredgecolor因此被忽略。

一個解決方案不會將c參數與顏色映射一起使用,而是單獨使用facecolors和和edgecolors。在這種情況下,facecolors可以設置爲"None"edgecolors可以給出一個要使用的顏色列表。

要創建此列表,可以應用相同的顏色表。

c = plt.cm.gist_rainbow(colors) 
plt.scatter(x, y, s=area,facecolors="None", edgecolors=c, lw=1,alpha=0.5) 

一個完整的例子:

import numpy as np 
import matplotlib.pyplot as plt 

N = 50 
x = np.random.rand(N) 
y = np.random.rand(N) 
colors = np.random.rand(N) 
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radii 

c = plt.cm.gist_rainbow(colors) 
plt.scatter(x, y, s=area,facecolors="None", edgecolors=c, lw=2,alpha=0.5) 
plt.show() 

enter image description here

+1

這種解決方案更優雅比我 –

+0

我認爲這取決於:該解決方案使用'set_facecolor'實際上允許使用顏色映射設置facecolor。這在改變數據時會有好處,例如在動畫中,沒有對顏色進行重新整理。對於通常的情況,這兩種解決方案都同樣好,我會說。 – ImportanceOfBeingErnest

+0

謝謝你的答案! –

2

的問題是,color=覆蓋facecolors=參數。

我想出的解決方案是獲得由pyplot.scatter()返回的PathCollection,然後直接更改facecolor。請注意,您可能需要增加線寬才能更好地查看邊緣。

import numpy as np 
import matplotlib.pyplot as plt 


N = 50 
x = np.random.rand(N) 
y = np.random.rand(N) 
colors = np.random.rand(N) 
area = np.pi * (15 * np.random.rand(N))**2 # 0 to 15 point radii 

a = plt.scatter(x, y, s=area,c=colors,facecolor='none',lw=2,cmap="gist_rainbow", alpha=0.5) 
a.set_facecolor('none') 
plt.show() 

enter image description here

+0

非常感謝!它工作得很好。 –

+0

如果答案已解決您的問題,請考慮通過單擊答案旁邊的複選標記(無論您更喜歡哪個)來接受該問題以解決問題。 –

相關問題