30

matplotlib の散布関数のカラー ポイントを 3 番目の変数で作成する方法を知りたいです。

matplotlib の gnuplot linecolor 変数に質問 がありますか? およびMatplotlib 散布図。3 番目の変数の関数としての color は同様のクエリを提起しましたが、これらの質問に対する答えは私の問題に対応していません。c=arraywhichspecifiespointcolour散布関数で を使用すると、エッジの色ではなく、塗りつぶしの色のみが設定されます。これは、たとえば、 を使用するc=arr...ときに の使用が失敗することを意味しmarkersymbol='+'ます (そのマーカーには塗りつぶしがなく、エッジのみがあるため)。どのシンボルが使用されているかに関係なく、ポイントを 3 番目の変数で確実に色付けしたいと考えています。

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

4

1 に答える 1

34

これは、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()

結果:

ここに画像の説明を入力

あるいは、n 個の点に対して、形状 (n, 3) の RGB カラー値の配列を作成し、それをedgecolorsキーワード引数の に割り当てscatter()ます。

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()

結果: ここに画像の説明を入力

zこの例では、値を範囲 [0,1] にスケーリングし、スケーリングされた値でカラーマップを呼び出すことによって RGBA 値を取得しplt.cm.coolwarmます。この方法で呼び出すと、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.    ]])
于 2012-10-19T00:33:05.560 に答える