2017-08-22 12 views
3

2つのプロットでサブプロットを作成しようとしています。最初のプロットは基本的に散布図(私はregplotを使用しています)で、2番目のグラフはヒストグラムです。次のように異なる種類のサブプロット間で色を同期させる方法Seaborne/Matplotlib

私のコードは次のとおりです。

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 

data = {'source':['B1','B1','B1','C2','C2','C2'], 
     'depth':[1,4,9,1,3,10], 
     'value':[10,4,23,78,24,45]} 

df = pd.DataFrame(data) 

f, (ax1, ax2) = plt.subplots(1,2) 

for source in df['source'].unique(): 

    x = df.loc[df['source'] == source, 'value'] 
    y = df.loc[df['source'] == source, 'depth'] 

    sns.regplot(x, 
       y, 
       scatter = True, 
       fit_reg = False, 
       label = source, 
       ax = ax1) 
    ax1.legend() 

    sns.distplot(x, 
       bins = 'auto', 
       norm_hist =True, 
       kde = True, 
       rug = True, 
       ax = ax2, 
       label = source) 
    ax2.legend() 
    ax2.relim() 
    ax2.autoscale_view() 
plt.show() 

結果は以下のとおりです。

enter image description here

あなたが見ることができるように、散乱およびヒストグラム間の色が異なっています。さて、私はカラーパレットとすべてを使って遊んでいましたが、これはうまくいきませんでした。どのように私は色を同期することができますどのような光を捨てることができますか?

ありがとうございました。

答えて

2

プロット関数の引数はcolorです。 itertools.cycle色付きのサイクルのためのあなたの現在のseabornカラーパレットからのプロットには、この例では1つずつ選択されています

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import itertools 

data = {'source':['B1','B1','B1','C2','C2','C2'], 
     'depth':[1,4,9,1,3,10], 
     'value':[10,4,23,78,24,45]} 

df = pd.DataFrame(data) 

f, (ax1, ax2) = plt.subplots(1,2) 

# set palette 
palette = itertools.cycle(sns.color_palette()) 

# plotting 
for source in df['source'].unique(): 

    x = df.loc[df['source'] == source, 'value'] 
    y = df.loc[df['source'] == source, 'depth'] 

    # color 
    c = next(palette) 
    sns.regplot(x, 
       y, 
       scatter = True, 
       fit_reg = False, 
       label = source, 
       ax = ax1, 
       color=c) 
    ax1.legend() 

    sns.distplot(x, 
       bins = 'auto', 
       norm_hist =True, 
       kde = True, 
       rug = True, 
       ax = ax2, 
       label = source, 
       color=c) 
    ax2.legend() 
    ax2.relim() 
    ax2.autoscale_view() 

plt.show() 

enter image description here

あなたはthis answer

+0

これは完璧です。あなたの答えをありがとう。 –

0

にのようなあなた自身のcolor paletteを設定することができ、私が持っていました非常に似た問題です。

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 

data = {'source':['B1','B1','B1','C2','C2','C2'], 
     'depth':[1,4,9,1,3,10], 
     'value':[10,4,23,78,24,45]} 

df = pd.DataFrame(data) 

f, (ax1, ax2) = plt.subplots(1,2) 
palette = sns.color_palette() 
for color,source in zip(palette,df['source'].unique()): 
 x = df.loc[df['source'] == source, 'value'] 
     y = df.loc[df['source'] == source, 'depth'] 

     sns.regplot(x, 
        y, 
        scatter = True, 
        fit_reg = False, 
        label = source, 
        ax = ax1, 
   color=color) 
 ax1.legend() 

     sns.distplot(x, 
        bins = 'auto', 
        norm_hist =True, 
        kde = True, 
        rug = True, 
        ax = ax2, 
        label = source, 
:ここ

はセレニティの回答(新しいパーツw.r.t.元のコードが強調表示)の代替です

    color=color) 
 ax2.legend() 
     ax2.relim() 
     ax2.autoscale_view() 
plt.show() 

基本的には、sns.color_palette()で使用しているmatplotlibの色のリストを取得します。 colorsns.color_palette()によって返されたリストであり、sns.xxxplot()への呼び出しのパラメータとしてcolorを指定zip() -ped対(color, source)、リスト上

ループ。

関連する問題