Modifiez la largeur des barres en utilisant dataframe.fonction plot () dans matplotlib

je fais un diagramme en barres empilées à l'aide de:

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

je veux contrôler la largeur des barres pour que les barres soient reliées entre elles comme un histogramme.

j'ai regardé la documentation mais en vain - des suggestions? Est-il possible de faire de cette façon?

23
demandé sur Osmond Bishop 2013-02-12 06:23:01

2 réponses

Pour ceux qui viennent à travers cette question:

depuis pandas 0.14, tracer avec des barres a une commande 'width' : https://github.com/pydata/pandas/pull/6644

L'exemple ci-dessus peut maintenant être résolu simplement en utilisant

df.plot(kind='bar', stacked=True, width=1)
47
répondu Murkbeard 2014-12-05 17:46:24

si vous pensez que vous devez "postprocess" le barplot avec matplotlib comme pandas règle intérieurement la largeur des barres.

les rectangles qui forment les barres sont en objets de conteneur. Ainsi, vous devez itérer à travers ces conteneurs et définir la largeur des rectangles individuellement:

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

13
répondu bmu 2013-02-14 09:39:54