2016-08-11 14 views
3

私はここで本当にシンプルなものを混乱させていると確信していますが、それを理解できないようです。私は単に、データフレームを循環して、ax.scatterを繰り返し呼び出すことによって、グループごとに異なる色を持つ散布図としてデータのグループをプロットしようとしています。最低限の例は次のとおりです。matplotlibの複数の散布図で予期しない色が発生する

import numpy as np; import pandas as pd; import matplotlib.pyplot as plt; import seaborn as sns 
%matplotlib inline 

df = pd.DataFrame({"Cat":list("AAABBBCCC"), "x":np.random.rand(9), "y":np.random.rand(9)}) 

fig, ax = plt.subplots() 
for i,cat in enumerate(df.Cat.unique()): 
    print i, cat, sns.color_palette("husl",3)[i] 
    ax.scatter(df[df.Cat==cat].x.values, df[df.Cat==cat].y.values, marker="h",s=70, 
       label = cat, color=sns.color_palette("husl",3)[i]) 
ax.legend(loc=2) 

私は私が実際にグループを巡回し、異なる色を選択していたことを確認するために私自身の正気のためprintの文を追加しました。出力は次のようにただしなります

enter image description here

(これは見て少しにくい場合:グループA、B、およびCは、しかし、すべてのscatterpointsは一見異なるとを持っている、伝説によると3つの非常に類似したブルースを持っていますグループ間で同一でもない無関係な色)

ここでは何が起こっていますか?

答えて

1

は最小作業例を下に削り少しより多くの時間を費やしている必要があります。問題は、(float,float,float)タプルを返すsns.color_paletteを呼び出したときに発生したことがわかりました。scatterはアルファ値として数値の1つを明らかに解釈するので混乱します。

問題は、アルファの明示的な値を追加する

color = sns.color_palette("husl",3)[i] + (1.,) 

color = sns.color_palette("husl",3)[i] 

を置換することによって解決されます。

+0

うわー!あなた自身でそれを理解するのは良いことです。 –

1

あなたは、ターゲットaxを指定してax、単一の軸に複数の列グループをプロットするプロットを繰り返してpandasscatter()方法を使用することができます。

# set random seed 
np.random.seed(42)      

fig, ax = plt.subplots() 
for i,label in enumerate(df['Cat'].unique()): 
    # select subset of columns equal to a given label 
    df['X'] = df[df['Cat']==label]['x']  
    df['Y'] = df[df['Cat']==label]['y'] 
    df.plot.scatter(x='X',y='Y',color=sns.color_palette("husl",3)[i],label=label,ax=ax) 
ax.legend(loc=2) 

enter image description here

+0

残念ながら、私がマップ上にプロットしているように、残念なことに私の使用例ではない可能性があるので、 'Basemap'オブジェクトの' scatter'メソッドを使用する必要があります。 –