2017-05-10 6 views
0

私はこの散布図をPythonで描画していますが、各ラベルの色を異なる(対照的な)色で描画したいと思います。各ラベルには複数のポイントがあります。plt.scatterplotの各ラベルに異なる色を割り当てます

注釈を付けるために供給するものになる可能性のように思えるが、私はどのように、私はそれを見つけることができていないとして、非常に確認していない:

:私はで上記のコマンドを置き換えることができます

for i, label in enumerate(labels): 
    x, y = low_dim_embs[i, :] 
    plt.scatter(x, y) 
    plt.annotate(label, 
       xy=(x, y), 
       xytext=(5, 2), 
       textcoords='offset points', 
       ha='right', 
       va='bottom') 

plt.scatter(x, y, color=mycolors) 

手動で指定された色が表示されますが、各エントリに対して(そしてエントリごとに繰り返しが多数あります)自動的な方法はありますか?

私のデータセットには、次のようになります。

x,y,label 
1,2,label1 
1,3,label1 
2,-1,label1 
4,1,label2 
5,1,label2 
... 

各labelxに属する座標と同じ色を(私はおそらくも伝説のものが必要になります)が必要です。

答えて

1

同じラベルの問題を回避するには、データの各固有の値に固有の番号を割り当てる色のリストを生成するスクリプトを作成します(このコード行はthis answerで説明されています) :

私エラー与える
import numpy as np 
import matplotlib.pyplot as plt 

line = plt.figure() 

data = [[1,1.5,3,2.4,5],[2,4.1,2.4,1,3],["apple","banana","grape","apple","banana"]]  

colors = [{ni: indi for indi, ni in enumerate(set(data[2]))}[ni] for ni in data[2]] 

plt.scatter(data[0], data[1], c=colors, cmap="plasma")  

for i in range(len(data[0])):  
    plt.annotate(str(data[2][i]), 
        xy=(data[0][i], data[1][i]), 
        xytext=(data[0][i], data[1][i]), 
        textcoords='offset points', 
        ha='right', 
        va='bottom') 

plt.show() 

enter image description here

+0

:C =タプル(マップ(フロート、C)) TypeError例外を 'numpy.int64' オブジェクトが反復可能ではありません。また、10個のエントリに同じラベルが付いていて、同じ色になっても、実際にはそうなりますか? – dorien

+1

@dorienいいえ、それはその要件を満たしませんでした、私はあなたの編集の前にそれを知らなかった、ごめんなさい。私は私の答えを更新しようとします。 –

+0

@dorienこれで動作するはずです –

関連する問題