web-dev-qa-db-fra.com

Tracer tout pandas colonnes de trame de données séparément

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))
2
Manu Sharma

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

enter image description here

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

enter image description here

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])
5
annhak

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()
0
Ramon