web-dev-qa-db-fra.com

matplotlib: trace plusieurs colonnes de pandas trames de données sur le graphique à barres

J'utilise le code suivant pour tracer un graphique à barres:

import matplotlib.pyplot as pls 
my_df.plot(x='my_timestampe', y='col_A', kind='bar') 
plt.show()

L'intrigue fonctionne bien. Cependant, je souhaite améliorer le graphique en ayant 3 colonnes: 'col_A', 'col_B' et 'col_C' sur le graphique. Comme dans l'exemple ci-dessous:

enter image description here

Je voudrais que le col_A soit affiché en bleu au-dessus de l'axe des x, col_B en rouge sous l'axe des x et col_C en vert au-dessus de l'axe des x. Est-ce quelque chose de possible dans matplotlib? Comment puis-je apporter des modifications pour tracer les trois colonnes? Merci!

29
Edamame

Vous pouvez tracer plusieurs colonnes à la fois en fournissant une liste de noms de colonnes à l'argument plot 'y.

df.plot(x="X", y=["A", "B", "C"], kind="bar")

enter image description here

Cela produira un graphique où les barres sont assises les unes à côté des autres.

Pour les faire se chevaucher, vous devrez appeler plot plusieurs fois et fournir les axes à tracer en tant qu'argument ax au tracé.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

y = np.random.Rand(10,4)
y[:,0]= np.arange(10)
df = pd.DataFrame(y, columns=["X", "A", "B", "C"])

ax = df.plot(x="X", y="A", kind="bar")
df.plot(x="X", y="B", kind="bar", ax=ax, color="C2")
df.plot(x="X", y="C", kind="bar", ax=ax, color="C3")

plt.show()

enter image description here

71

Bien que la réponse acceptée fonctionne correctement, puisque v0.21.0rc1 , un avertissement est émis.

UserWarning: Pandas n'autorise pas la création de colonnes via un nouveau nom d'attribut

Au lieu de cela, on peut faire

df[["X", "A", "B", "C"]].plot(x="X", kind="bar")
5
ayorgo