2014-10-14 7 views
10

Ho prossimo DF:Xticks di trama panda, rinominare con la stringa

A B C 
1 2 'name 1' 
2 3 'name 2' 
3 5 'name 3' 

Che cosa è l'ordine corretto per tracciare colonna A e l'uso della colonna C come xticks?

df['A'].plot(xticks = 'C') 
df['A'].plot(xticks = df['C']) 

non lavorato sia ... Ad ogni modo il suo operato, ad esempio

df['A'].plot(xticks=[1,2,3]) 

Devo davvero convertire in sequenza? Ho anche osme la modifica della domanda. Ho avuto la prossima Messaggio di errore:

ValueError: could not convert string to float: name 3 

ho una colonna di uno stringhe e voglio usarlo come xticks per la mia trama.

PS

Non andare con la funzione plot panda diretta. Ho trovato la soluzione here

risposta

26

Il link che hai fornito è una buona risorsa, ma mostra il tutto viene fatto in matplotlib.pyplot e usa .subplots() per arrivare agli assi. Mentre l'ho già fatto, continuo a cercare modi per utilizzare il più possibile la funzione .plot() integrata nei panda. Per me può semplificare il codice e rendere più facile sfruttare la bontà di DataFrame.

Sembra che ci siano un certo numero di cose che non sono facili da fare completamente all'interno dei parametri di df.plot() di per sé, però. Fortunatamente restituisce uno matplotlib.AxesSubplot, che apre una gamma molto più ampia di possibilità.

ho copiato i dati sopra in un dataframe:

df = pd.read_clipboard(quotechar="'") 

Sembra sorta-di simile:

A B C 
0 1 2 'name 1' 
1 2 3 'name 2' 
2 3 5 'name 3' 

Ma, naturalmente, molto meglio in html non table-paralizzato. (Forse SO risolverà questo un giorno).

Poi tutto quello che dovevo fare era:

ax = df.A.plot(xticks=df.index, rot=90) 
ax.set_xticklabels(df.C) 

Se si utilizza IPython/Jupyter e %matplotlib inline quindi sia di quelli bisogno di essere nella stessa cella. All'inizio l'avevo dimenticato e ho passato un po 'di tempo a cercare di capire cosa stava andando storto.

enter image description here

Si può fare tutto usando la variabile ax:

ax = df.A.plot() 
ax.set_xticks(df.index) 
ax.set_xticklabels(df.C, rotation=90) 

ma, come ho già detto, non ho trovato un modo per il xticklabels all'interno dei parametri di funzione df.plot(), che avrebbe rendere possibile fare tutto questo in una sola riga.

Il passaggio aggiuntivo per ruotare le etichette xtick potrebbe essere estraneo in questo esempio, ma è stato utile in quello su cui stavo lavorando quando cercavo questa risposta.

E, naturalmente, è possibile tracciare entrambe le colonne A e B insieme ancora più semplice:

ax = df.plot() 
ax.set_xticks(df.index) 
ax.set_xticklabels(df.C, rotation=90) 

enter image description here

+0

Anche se sembra si può avere già ottenuto questa risposta quando ha chiesto quasi la stessa domanda [qui] (http://stackoverflow.com/questions/23472877/plot-with-pandas-xticks?rq=1). – Alnilam

Problemi correlati