J'ai un dataframe dd
contenant 84 lignes et 3 colonnes.
Maintenant, je veux tracer un tracé de zone avec lui et utiliser son index comme xticks, donc je fais ce qui suit:
dd.plot(kind='area')
plt.show()
(P.S. Je n'ai pas assez de réputation pour poster une photo, donc j'ai mis ce lien ici.)
Il s'avère que certains xticks sont masqués automatiquement: il devrait y avoir 84 xticks, mais seulement 9 d'entre eux sont affichés (semble être masqués automatiquement).
J'ai trouvé une question similaire ici , mais quand j'ai essayé la méthode mentionnée dans le lien, j'ai obtenu un CnoversionError
:
ConversionError: Failed to convert value(s) to axis units: Index(['!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.',
'/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<',
'=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't'],
dtype='object')
J'ai remarqué que la différence entre ma question et le lien ci-dessus est que l'index de mon DataFrame a un dtype object
(ce sont des chaînes), et j'ai trouvé que si je change l'index en une liste d'int, le l'erreur disparaît.
Le code pour reproduire l'erreur:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
dd=pd.DataFrame(np.random.Rand(84,3),index=[chr(ascii) for ascii in range(33,33+84)])
dd.plot(kind='area',xticks=dd.index)
plt.show()
Merci pour votre aimable réponse à l'avance!
Nous devons fournir les positions d'index des étiquettes dans la fonction xticks, l'ordre des étiquettes doit être conforme aux positions d'index. La fonction xticks prend 3 arguments,
rotation prend la façon dont l'étiquette doit être présentée dans l'intrigue
x = df['state'] y = df['sales'] tickvalues = range(0,len(x)) // or tickvalues = df.index plt.figure(figsize = (20,5)) plt.xticks(ticks = tickvalues ,labels = labellist, rotation = 'vertical') plt.plot(x,y)