2013-02-05 18 views
25

Ho un codice trama semplice comeaggiungendo asse più zecche utilizzando matplotlib

plt.plot(x,y) 
plt.show() 

voglio aggiungere alcune zecche in più su l'asse x in aggiunta a quelli attuali, diciamo a

extraticks=[2.1, 3, 7.6] 

Come si vede, non ho un motivo per le zecche, quindi non voglio aumentare la frequenza delle zecche per l'intero asse; basta mantenere quelli originali e aggiungere quegli extra ...

E 'possibile, a tutti?

saluti

risposta

45

Sì, si può provare qualcosa di simile:

plt.xticks(list(plt.xticks()[0]) + extraticks) 

La funzione da utilizzare è xticks(). Quando chiamato senza argomenti, restituisce i tick attuali. Chiamandolo con argomenti, puoi impostare le posizioni di spunta e, opzionalmente, le etichette.

+2

+1 Ottima risposta concisa. Nota a margine: non è necessaria la chiamata a 'sorted()' in là. Ovviamente non è un grosso problema però. –

+0

Grazie per la nota @PaulH, per qualche motivo ho pensato che sarebbe più sicuro, ma funziona anche senza. Modificato. –

+0

Come modificare la spaziatura dei biglietti extra per evitare di sovrapporsi agli altri tick? – Sigur

9

Per ragioni di completezza, vorrei dare la versione OO di grande risposta di @ Lev-Levitsky:

lines = plt.plot(x,y) 
ax = lines[0].axes 
ax.set_xticks(list(ax.get_xticks()) + extraticks) 

Qui usiamo l'oggetto Axes estratto dalla sequenza Lines2D restituita da plot. Normalmente se stai usando l'interfaccia OO avresti già un riferimento allo Axes in prima pagina e chiameresti plot su quello anziché su pyplot.

angolo Caveat

Se per qualche motivo avete modificato i vostri limiti degli assi (ad esempio, da programmaticamente lo zoom in per una parte dei dati), è necessario ripristinarli dopo questa operazione:

lim = ax.get_xlim() 
ax.set_xticks(list(ax.get_xticks()) + extraticks) 
ax.set_xlim(lim) 

In caso contrario, il tracciato mostrerà l'asse x con tutti i tick disponibili sull'asse.

Problemi correlati