J'ai le dataframe suivant :
>>> mean_traf_tie
a d c
0.22 0.99 0.11 22
0.23 21
0.34 34
0.46 45
0.44 0.99 0.11 45
0.23 65
0.34 66
0.46 68
0.50 0.50 0.11 22
0.23 12
0.34 34
0.46 37
...
Je veux créer un tracé à partir de cette trame de données, de manière à ce que c soit l'axe X, y soit la vitesse moyenne et les lignes soient conformes aux colonnes a et d, donc par exemple, une ligne sera pour a = 0,22 et d=0.99, le x sera c et y sera la vitesse moyenne, puis la 2ème ligne sera pour a=0.44 et d=0.99 ect.
J'ai essayé de faire comme ça :
df.plot()
(les valeurs sont différentes dans la trame de données d'origine).
comme vous pouvez le voir, pour une raison quelconque, il trace sur l'axe des x a,d et ne crée qu'une seule ligne.
J'ai essayé de le réparer comme ceci :
df.unstack(level=0).plot(figsize=(10,6))
mais ensuite j'ai eu un graphique très étrange, avec les bonnes lignes par a et d mais un mauvais axe x :
Comme vous pouvez le voir, il trace en quelque sorte les valeurs a,d, mais ce n'est pas ce que je veux - je veux que ce soient les colonnes c, puis créer des lignes basées sur les colonnes a,d, ce qui suppose de créer une ligne continue. J'ai essayé ça aussi :
df[('mean_traf_tie')].unstack(level=0).plot(figsize=(10,6))
plt.xlabel('C')
plt.ylabel('mean_traf_tie')
La sortie souhaitée aura la colonne c comme axe x, le mean_traf_tie comme axe y, et des lignes seront générées sur les colonnes a et d (ligne pour 0,22 et 0,99, ligne pour 0,44 et 0,99 ect).
Mise à jour : j'ai réussi à le parcourir en concatinant les deux colonnes d'index en une seule avant de tracer comme ceci :
df['a,d'] = list(zip(df.a, df.d))
df=df.groupby(['a,d','C']).mean()
df.unstack(level=0).plot(figsize=(10,6))
le legenss n'est toujours pas idéaliste mais j'ai obtenu les lignes et les axes comme je le voulais.
Si quelqu'un a une meilleure idée de comment le faire avec des colonnes originales, je suis toujours ouvert à apprendre.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots