2017-05-15 9 views
1

ここでは比較的簡単な質問をしたいと思います。私はグラフ化している2つのbarchartを持っています。それらの1つはより多くのカテゴリを有し、したがって各バーの幅はより小さい。 (シンプル、標準プロット)以下のサンプルコード/グラフを参照してください:Matplotlib - 棒グラフの幅の値を調べる

fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True) 

ax1.set_title("Sample Graph", size='16') 
ax1.bar(df1.index, df1.c_destination, color='purple', alpha =1) 
ax1.set_axisbelow(True) 
ax1.set_xticks(df1.index) 
ax1.set_xticklabels(df1['index'], rotation=45, ha='right', size='14') 
ax1.patch.set_facecolor(color='gray') 
ax1.patch.set_alpha(0.5) 

ax2.set_title("Sample Graph Other", size='16') 
ax2.bar(df2.index, df2.destination, color='purple', alpha =1) 
ax2.set_axisbelow(True) 
ax2.set_xticks(df2.index) 
ax2.set_xticklabels(df2['index'], rotation=45, ha='right', size='14') 
ax2.patch.set_facecolor(color='gray') 
ax2.patch.set_alpha(0.5) 

左のグラフは、12軒のバーがあり、右のグラフは8小節を持っている場合、どのように私は少数の棒でグラフを確保することができています同じバー幅ですか?私はそれぞれの幅を定義することができる知っているが、ax2がax1からこの値にアクセスできるかどうか疑問に思っていますか?ご協力ありがとうございました。

+0

'bar(x、y、width = 30)'これは単に 'width'引数を使って行うことができませんか?試みる価値がある – mtkilic

+0

私は言及したとおり、私はax1とax2の両方を個別に定義する必要があります。私はax1で自動的に生成された幅を利用しようとしているし、ax2にこれを運ぶ。 –

答えて

1
In [147]: [p.get_width() for p in ax1.patches] 
Out[147]: [0.5, 0.5, 0.5, 0.5, 0.5] 
+0

恐ろしい! 4分で受け入れます! –

+0

@AndrewL、それは助けて嬉しい:) – MaxU

1

バーの実際の幅は同じであることに注意してください。それらはすべて0.8データ単位の幅です。ただし、左軸の範囲が大きいため、1つのデータ単位は右軸よりも小さくなります。

あなたができることは、どちらの場合でも同じデータ範囲を使用することです。

plt.subplots(1, 2, sharey=True, sharex=True) 
+0

それは非常に興味深いです。私はこのアプローチを試みましたが、私のax1はax2のより小さな範囲を取っているようです(そしてラベルは消えました)。 Maxが私の質問に答えたので(私は両方が同じ幅であることを知らなかった)、私はこの質問を別々に尋ねるべきですか?両方のグラフでバーの外観を一致させる方法を具体的に尋ねますか? –

+0

これはあなたの選択です。質問を編集することもできます。しかし、どのような場合でも、問題の[mcve]を提供してください。 – ImportanceOfBeingErnest

+0

Btw。共有軸の値が欠落している場合は、棒グラフの数が多いグラフをプロットします。 – ImportanceOfBeingErnest

関連する問題