2016-11-02 5 views
0

バーの色をあらかじめ定義された色のセットから選択するバープロットを作成しようとしています。 "pahse"値は色を決定します。 3つの範囲に分割され、範囲がランク付けされます。ランクは、パレットからカラーを呼び出すために使用されます。この部分はうまく動作します。しかし、私はカラーバーがついていました。カラーバーには、ランク付けに使用された値に基づく辞書「rank_classes」とティック/ラベルのキーに基づいた色を含める必要があります。私はmatplotlibのmpl.colorbar.ColorbarBase()を試しましたが、seaborns sns.cubehelix_palette()が好きではないようです。私はこれらの2つのものを一緒に、あるいはもっと簡単な解決策をとるためにどうやって置くのだろうか?バーの色をランクで選択したときのバープロットのカラーバー

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
sns.set_style("white") 
#%matplotlib inline 

index = ['25', '26', '27'] 
count = [10, 50, 22] 
phase = [0.9, 2.2, 1.2] 
ranks = [0, 2, 1] 

rank_classes = {0:"Ph<1", 1:"1<Ph<1.2", 2:"Ph>=1.2"} 

d = {'count' : pd.Series(count, index=index), 
    'phase' : pd.Series(phase, index=index), 
    'rank' : pd.Series(ranks, index=index) 
    } 

df = pd.DataFrame(d) 

# barplot 
fig, ax = plt.subplots() 
pal = sns.cubehelix_palette(3) 

x = df.index 
y = list(df['count']) 
z = list(df['rank']) 

sns.barplot(x=x, y=y, palette=np.array(pal)[z]) 
sns.despine() 
+0

あなたはこのhttp://stackoverflow.com/questions/31313606/pyplot-matplotlib-bar-chart-with-fill-color-depending-on-valueのような意味ですか? – lanery

+0

@lanery 私が見ているのは、お互いの上に2つの図をプロットし、散布図からカラーバーのみを表示することです。私の場合は、私のニーズに合わせて参照コードを適合させることに2つの問題があります。 まずは、** sns.cubehelix_palette(3)**のような色数のあらかじめ定義された色のseabornカラースキームを使用したいと思います。しかし、このフォーマットはplt.scatter()のcmapと互換性がありません。どのように互換性を持たせるのですか? 第2に、** sns.cubehelix_palette(3)で**、plt.colobar(**)の最初の色、2番目の色などの定義済みの文字列ラベル( "A"、 "B"、 "Z")を割り当てる方法()**? – tonu

答えて

1

ほとんどが

import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import seaborn as sns 
sns.set_style("white") 
%matplotlib inline 

index = ['25', '26', '27'] 
count = [10, 50, 22] 
phase = [0.9, 2.2, 1.2] 
rank = [0, 2, 1] 
# 
rank_classes = {0:"Ph<1", 1:"1<Ph<1.2", 2:"Ph>=1.2"} 

pal = sns.cubehelix_palette(len(index)) 
cmp = mpl.colors.LinearSegmentedColormap.from_list('my_list', pal,\ 
                N=len(index)) 
plot = plt.scatter(index, count, c=range(len(index)), cmap=cmp) 
plt.clf() 
plt.colorbar(plot) 
sns.barplot(x=index, y=count, palette=np.array(pal)[rank]) 
sns.despine() 

はカラーバーで素敵なプロットを生成します。私が把握しなければならないのは、カラーバーの番号ラベル(0、0.3 ... 3.0)を辞書rank_classesにリストされている文字列に置き換える方法だけです。

Bar plot with colobar

+0

最後に、私が必要としていたものを得ることができました: http://stackoverflow.com/questions/3831569/matplotlib-pyplot-colorbar-question および http://stackoverflow.com/questions/15908371/matplotlib-colorbars-およびそのテキストラベル – tonu

関連する問題