2016-08-18 10 views
1

パンダで複数の積み重ね棒グラフを作ろうとしていますが、問題が発生しています。パンダで複数積み重なった棒グラフ

import pandas as pd 

df = pd.DataFrame({'a':[10, 20], 'b': [15, 25], 'c': [35, 40], 'd':[45, 50]}, index=['john', 'bob']) 

ax = df[['a', 'c']].plot.bar(width=0.1, stacked=True) 
ax=df[['b', 'd']].plot.bar(width=0.1, stacked=True, ax=ax) 
df[['a', 'd']].plot.bar(width=0.1, stacked=True, ax=ax) 

次のプロット生成します:あなたが見ることができるように

enter image description here

、各クラスタ内のバーは互いの上にプロットされ、ではない何があるここでは、サンプルコードです私は達成したい。私は、同じクラスタ内の棒を互いに隣り合わせて描きたい。私は "ポジション"の議論を試してみましたが、大成功はしませんでした。

どのようにこれを達成するためのアイデアですか?

示すように、彼らは互いに隣接するように、あなたが bar-plotpositionパラメータをシフトすることによってそれを行うことができ

答えて

3

matplotlib.style.use('ggplot') 

fig, ax = plt.subplots() 
df[['a', 'c']].plot.bar(stacked=True, width=0.1, position=1.5, colormap="bwr", ax=ax, alpha=0.7) 
df[['b', 'd']].plot.bar(stacked=True, width=0.1, position=-0.5, colormap="RdGy", ax=ax, alpha=0.7) 
df[['a', 'd']].plot.bar(stacked=True, width=0.1, position=0.5, colormap="BrBG", ax=ax, alpha=0.7) 
plt.legend(loc="upper center") 
plt.show() 

enter image description here

+0

私は混乱しています。ドキュメントでは、 "position"引数は0から1になりますが、0以上1未満の値を使用しています。どのように機能しますか? – fireboot

+2

素敵な観察! pandasが 'matplotlib'オブジェクトにあるキーワード引数を継承していることを知っているので、それを利用してさまざまな設定を微調整することができます。このようなケースの1つは 'matplotlib-bar'プロットの' align'パラメータを使って 'pandas - bar'プロットの' position'パラメータを変更することです。あなたは['align'](http://www.linux.org/)を使用する[' source code'](https://github.com/pydata/pandas/blob/master/pandas/tools/plotting.py#L1904) /matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar)オプションを使用し、両方の* pos/neg *浮動小数点数を設定することができます。 –

+1

私が正しく理解すれば、パンダバーは普通のmatplotlibバーであり、その "align"プロパティは0以上の値をとるので動作します。 – fireboot

関連する問題