2017-05-15 6 views
1

Hoffentlich eine relativ einfache Frage hier- Ich habe zwei Barkarten, die ich graphisch bin. Einer von ihnen hat mehr Kategorien, daher ist die Breite jedes Balkens kleiner. Siehe Beispielcode/Grafik unten (einfache Standard Plotten):Matplotlib - Finden Balkendiagramm Breite Wert

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) 

Wenn die linke Graph hat 12 bar und die rechte Graph hat 8 bar, wie kann ich die Grafik mit weniger Balken gewährleisten hat die gleiche Strichbreite? Ich weiß, dass ich die Breite in jedem definieren könnte, aber ich frage mich, ob ax2 auf diesen Wert von ax1 zugreifen kann? Danke für Ihre Hilfe.

+0

'bar (x, y, width = 30)' Kann man das nicht einfach mit 'width' argument machen? einen Versuch wert – mtkilic

+0

Ich kann aber wie ich schon erwähnte ich müsste sowohl ax1 als auch ax2 einzeln definieren. Ich versuche, die automatisch generierte Breite in ax1 auszunutzen und diese auf ax2 zu übertragen. –

Antwort

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

Super! Wird in 4 Minuten akzeptiert! –

+0

@AndrewL, froh, dass es hilft :) – MaxU

1

Beachten Sie, dass die Balken tatsächlich die gleiche Breite haben. Sie sind alle 0,8 Dateneinheiten breit. Da jedoch der linke Achsenbereich größer ist, ist eine Dateneinheit kleiner als in der rechten Achse.

Sie können den gleichen Datenbereich in beiden Fällen verwenden, z. durch gemeinsame Nutzung der x-Achse

+0

Das ist sehr interessant. Ich habe diesen Ansatz versucht, aber es scheint, dass mein ax1 den kleineren Bereich von ax2 übernommen hat (und die Labels verschwunden sind). Da Max meine Frage beantwortet hat (ich hatte keine Ahnung, beide waren gleich breit), soll ich diese Frage nochmal gesondert stellen? Speziell gefragt, wie man die Balkenanzeige in beiden Graphen anpasst? –

+0

Sie haben die Wahl, Sie können Ihre Frage auch bearbeiten. Stellen Sie auf jeden Fall sicher, dass Sie ein Problem mit [mcve] haben. – ImportanceOfBeingErnest

+0

BTW. Wenn es nur darum geht, Werte auf den gemeinsamen Achsen zu verpassen, zeichnen Sie den Graphen mit der höheren Anzahl von Balken zuletzt. – ImportanceOfBeingErnest

Verwandte Themen