2017-04-20 7 views
2

エッジカラーにはカラーマップを使用し、フェーカラーは使用しない分散プロットが必要です。 facecolor='None'を使用すると動作しません。Matplotlib:エッジグラフのカラーマップがあるが、フェースカラーがない場合の散布図

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

引数がfacecolorとedgecolorに同時に影響するため、引数facecoloredgecolorは無視されます。

解決策は、c引数をカラーマップと共に使用するのではなく、代わりにfacecolorsedgecolorsだけを使用します。この場合、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=引数をオーバーライドすることです。

私が思いついた解決策は、PathCollectionpyplot.scatter()で返してから、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

答えがあなたの問題を解決した場合は、答えの隣にあるチェックマーク(好きな方)をクリックして受け入れて、その質問を閉じてください。 –

関連する問題