2013-02-12 12 views
19

でdataframe.plot()関数を使用して、バーの幅Iは、使用して積み重ねられたバープロットを作っています:編集matplotlibの

DataFrame.plot(kind='bar',stacked=True) 

を私はバーは互いに等に接続されるように、バーの幅を制御したいですヒストグラム

私はドキュメントを見てきましたが、何の示唆もありません。このようにすることは可能ですか?

+0

あなたは幅= 1(バーまで)を渡したいが、プロットはあなたにできない:... –

+0

奇妙な。 alignキーワードはmplの反対側として動作し、logキーワードも奇妙です。 @Osmond、私はそれを回避する:ax.bar(df.index.values、df.values) –

+0

[このレスポンス](https://stackoverflow.com/a/27321764/577088)を参照してください。最新の答え。受け入れられた答えはかなり古くなっています。 – senderle

答えて

12

もしあなたがmatplotlibでバープロットを「後処理」する必要があると思うのであれば、パンダは内部的にバーの幅を設定します。

バーを形成する矩形は、コンテナオブジェクト内にあります。 は、だから、これらのコンテナを反復処理し、個別の長方形の幅を設定する必要があります。パンダ0.14以来

は、バーをプロットすることがあります。この質問に渡って来て、誰のために

In [208]: df = pd.DataFrame(np.random.random((6, 5)) * 10,    
         index=list('abcdef'), columns=list('ABCDE')) 

In [209]: df 
Out[209]: 
    A B C D E 
a 4.2 6.7 1.0 7.1 1.4 
b 1.3 9.5 5.1 7.3 5.6 
c 8.9 5.0 5.0 6.7 3.8 
d 5.5 0.5 2.4 8.4 6.4 
e 0.3 1.4 4.8 1.7 9.3 
f 3.3 0.2 6.9 8.0 6.1 

In [210]: ax = df.plot(kind='bar', stacked=True, align='center') 

In [211]: for container in ax.containers: 
       plt.setp(container, width=1) 
    .....:   

In [212]: x0, x1 = ax.get_xlim() 

In [213]: ax.set_xlim(x0 -0.5, x1 + 0.25) 
Out[213]: (-0.5, 6.5) 

In [214]: plt.tight_layout() 

stacked_bar.png

+1

すてきな答え。私は後処理がオプションであることを認識していませんでした – zach

+0

私はdf.plotを使って、既存の棒グラフ上の余分な棒をプロットしています。 @bmu、あなたのメソッドは、新しいものに加えて、すべての古いプロットオブジェクトを変更するので私のためには機能しません。 df.plot()によって新たに作成されたバーの幅を変更するにはどうすればよいですか? – CPBL

+0

@ ChristopherBarrington-Leighおそらく、後のインデックス(以前のコンテナオブジェクトの数)でコンテナオブジェクトの反復処理を開始することができますが、例が良いでしょう。私はあなたが別の質問でこれをよく尋ねるべきだと思います。 – bmu

関連する問題