2012-10-18 9 views
23

matplotlibの散布関数のカラーポイントを第3の変数で作成する方法を知りたいと思います。散布機能でc=arraywhichspecifiespointcolourの使用は、塗りつぶしの色ではなく、エッジの色を設定します。第3変数の関数としてのmatplotlib散布図の色

質問 gnuplot linecolor variable in matplotlib?Matplotlib scatterplot; colour as a function of a third variable しかし、これらの質問に対する答えは、私の問題に対処していない、類似したクエリを提起しました。たとえば、markersymbol='+'を使用するとc=arr...の使用が失敗することを意味します(そのマーカーには塗りつぶしがなく、エッジのみがあるため)。どのシンボルが使用されているかにかかわらず、ポイントを第3の変数で確実に色づけしたい。

これをMatplotlibの散布関数で実現する方法はありますか?

+0

私は 'marker = '+''を設定すると色付きの '+'シンボルが得られます。 – Avaris

+0

@Avaris:私のためにも動作します。それに応じて私の答えを更新しました。 –

答えて

28

これはmatplotlibの1.1を使用して、私の作品:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y = np.sin(x) 

plt.scatter(x, y, marker='+', s=150, linewidths=4, c=y, cmap=plt.cm.coolwarm) 
plt.show() 

結果:あるいは

enter image description here

を、n個の点については、N(形状のRGBカラー値のアレイを作る3 )、キーワードscatter()edgecolorsに割り当てます。

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0, 20, 100) 
y = np.sin(x) 
z = x + 20 * y 

scaled_z = (z - z.min())/z.ptp() 
colors = plt.cm.coolwarm(scaled_z) 

plt.scatter(x, y, marker='+', edgecolors=colors, s=150, linewidths=4) 
plt.show() 

結果:例では、範囲[0,1]にz値をスケーリングし、スケーリングされたカラーマップ値をplt.cm.coolwarm呼び出すことによって、RGBA値を取得すること enter image description here

。このように呼び出されると、matplotlibカラーマップはRGBA値の配列を返し、各行は対応する入力値の色を与えます。例:

>>> t = np.linspace(0, 1, 5) 
>>> t 
array([ 0. , 0.25, 0.5 , 0.75, 1. ]) 
>>> plt.cm.coolwarm(t) 
array([[ 0.2298, 0.2987, 0.7537, 1. ], 
     [ 0.5543, 0.6901, 0.9955, 1. ], 
     [ 0.8674, 0.8644, 0.8626, 1. ], 
     [ 0.9567, 0.598 , 0.4773, 1. ], 
     [ 0.7057, 0.0156, 0.1502, 1. ]]) 
+0

あなたの答えウォーレンありがとうございます。残念ながら、あなたの最初の例は私のために黒プラスをもたらします。どうしてか分かりません。 mpl .__ version__は1.0.1を返します。私はrgbsのリストを 'edgecolors'に渡すようにしなければならないかもしれませんが、それは 'z'値とcolourmapから手動で作成する必要があることを意味します。 – user1082930

+0

バージョン1.1を使用しています。 1.0と1.1の間のマーカーコードにはいくつかの変更があり、問題になる可能性があります。 2つ目の例を更新して、 'z'値を色にマッピングする方法を示しました(ただし、matplotlib 1.0ではこれを試していません)。 –

+0

こんにちはウォーレン。これをフォローアップするために、新しい(1.1)バージョンのmatplotlibを使用すると、まったく同じコードで着色された点が得られます。解決されると考えられる問題。ありがとう! – user1082930

関連する問題