J'ai un pandas dataframe qui a juste des colonnes numériques, et j'essaye de créer un histogramme séparé pour toutes les fonctionnalités
ind group people value value_50
1 1 5 100 1
1 2 2 90 1
2 1 10 80 1
2 2 20 40 0
3 1 7 10 0
3 2 23 30 0
mais dans mes données réelles, il y a plus de 50 colonnes, comment puis-je créer un tracé séparé pour chacune d'entre elles
J'ai essayé
df.plot.hist( subplots = True, grid = True)
Cela m'a donné un complot peu clair qui se chevauchait.
comment puis-je les organiser en utilisant pandas subplots = True. L'exemple ci-dessous peut m'aider à obtenir des graphiques dans la grille (2,2) pour quatre colonnes. Mais c'est une longue méthode pour les 50 colonnes
fig, [(ax1,ax2),(ax3,ax4)] = plt.subplots(2,2, figsize = (20,10))
Les pandas subplots=True
Organiseront les axes dans une seule colonne.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.Rand(7,20))
df.plot(subplots=True)
plt.tight_layout()
plt.show()
Ici, tight_layout
N'est pas appliqué, car le chiffre est trop petit pour bien organiser les axes. On peut cependant utiliser un chiffre plus grand (figsize=(...)
).
Pour avoir les axes sur une grille, on peut utiliser le paramètre layout
, par ex.
df.plot(subplots=True, layout=(4,5))
La même chose peut être obtenue en créant les axes via plt.subplots()
fig, axes = plt.subplots(nrows=4, ncols=5)
df.plot(subplots=True, ax=axes)
Si vous voulez les tracer séparément (c'est pourquoi je me suis retrouvé ici), vous pouvez utiliser
for i in df.columns:
plt.figure()
plt.hist(df[i])
Une alternative pour cette tâche peut être d'utiliser la méthode "hist" avec "mise en page" hyperparamètre. Exemple utilisant une partie du code fourni par @ImportanceOfBeingErnest:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.Rand(7,20))
df.hist(layout=(5,4), figsize=(15,10))
plt.show()