2016-02-23 5 views
5

オンラインJupyterノートコードを実証し、色の違いを示すがである: https://anaconda.org/walter/pandas_seaborn_color/notebookSeabornカラーパレットがPandasバープロットで機能しないのはなぜですか?

私はパンダのデータフレーム方式を使用してバープロットを作るときの色が間違っています。 Seabornはmatplotlibのカラーパレットを改善します。 matplotlibのすべてのプロットは新しいSeabornパレットを自動的に使用します。しかし、Pandasのデータフレームの棒グラフは、Seaborn以外の色に戻ります。 PandasデータフレームのラインプロットにSeabornカラーを使用するため、この動作は一貫していません。これは私のプロットがすべての私のプロットに使用されたとしても、私のプロットが異なるスタイルに見えるようにします。

一貫したSeabornカラーパレットを取得するときに、Pandasメソッドを使用してプロットするにはどうすればよいですか?

私はpython 2.7.11で、このコード(pandas、matplotlib、seaborn)に必要なパッケージだけを持つconda環境を使っています。

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

df = pd.DataFrame({'y':[5,7,3,8]}) 

# matplotlib figure correctly uses Seaborn color palette 
plt.figure() 
plt.bar(df.index, df['y']) 
plt.show() 

# pandas bar plot reverts to default matplotlib color palette 
df.plot(kind='bar') 
plt.show() 

# pandas line plots correctly use seaborn color palette 
df.plot() 
plt.show() 
+0

* 1 *あなたの具体的な質問何です - あなたが解決策を知りたい(と可能性が回避策)、またはこの動作の理由を知りたいですか? * 2. *この情報は、あなたの質問に関連している可能性があります: 'pyplot.scatter'は海底色も使用しません(デフォルトで?)。 – kazemakase

+0

ありがとうございます。私は、一貫したSeabornカラーパレットを取得しながらPandasメソッドを使ってどのようにプロットできるかを知りたいという質問を編集しました。 (もちろん、その理由を知っていることは上記に役立つかもしれません) – Walter

答えて

5

sns.color_palette()を指すための@mwaskomの提供です。私はそれを探していたが、何とか私はそれを逃したので、元の混乱はprop_cycleである。


回避策として、手作業で色を設定できます。 1つまたは複数の列をプロットする場合、colorキーワード引数の動作がどのように異なるかに注意してください。

df = pd.DataFrame({'x': [3, 6, 1, 2], 'y':[5, 7, 3, 8]}) 

df['y'].plot(kind='bar', color=sns.color_palette(n_colors=1)) 

One column plot

df.plot(kind='bar', color=sns.color_palette()) 

Two columns plot

私のオリジナルの答え:

prop_cycle = plt.rcParams['axes.prop_cycle'] 
df['y'].plot(kind='bar', color=next(iter(prop_cycle))['color']) 
df.plot(kind='bar', color=[x['color'] for x in prop_cycle]) 
+1

'sns.color_palette()'を実行するだけで、現在の色を取得できます。リストの理解でそのビジネスを行う必要はありません。 – mwaskom

+0

それはトリックです! Goyoとmwaskomの両方に感謝します。 – Walter

2

これは(それを修正することが報告さissuePRを参照)パンダのマスターに固定され、(だけでなく、私が考えると箱ひげ図)は、特にバープロットのためのパンダのバグでした。
これは、今後数週間でリリースされるパンダ0.18.0になります。

+0

Joris、これは本当に役立ち、問題のリンクは参考になります。私は2つの答えを選ぶことができればいいと思っていますが、Goyo'sにはすぐに役立ち、このトピックに関して長生きする可能性がより高いと思われたので、Goyo'sに行ってきました。ありがとうございました! – Walter

+0

はい、もちろん、問題ありません! :-) – joris

+0

私も今この答えを確認しました。私はパンダの開発バージョン0.18.0rc1 + 62.g41b1d25をインストールしました。これが問題を解決します。 – Walter

関連する問題