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?
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)
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()