2012-10-21 7 views
145

Ho un grafico semilogx e vorrei rimuovere i xticks. Ho provato:Rimuovere xticks in un grafico matplotlib?

plt.gca().set_xticks([]) 
plt.xticks([]) 
ax.set_xticks([]) 

La griglia scompare (ok), ma le piccole zecche (al posto del zecche principale) rimango. Come rimuoverli?

risposta

249

Il metodo tick_params è molto utile per cose come questa. Questo codice disattiva i tick principali e secondari e rimuove le etichette dall'asse x.

from matplotlib import pyplot as plt 
plt.plot(range(10)) 
plt.tick_params(
    axis='x',   # changes apply to the x-axis 
    which='both',  # both major and minor ticks are affected 
    bottom='off',  # ticks along the bottom edge are off 
    top='off',   # ticks along the top edge are off 
    labelbottom='off') # labels along the bottom edge are off 
plt.show() 
plt.savefig('plot') 
plt.clf() 

enter image description here

+34

mi rendo conto come questo non solo risponde alla domanda, ma fornisce un modello per trasformare molte cose off/on. Questo applica il risultato ad entrambi gli assi xey: 'plt.tick_params (axis = 'both', which = 'both', bottom = 'off', top = 'off', labelbottom = 'off', right = 'off ', left =' off ', labelleft =' off ') ' –

+1

E se fosse una trama 3D? –

+11

Questa è un'ottima risposta. Per coloro che cercano la versione oo, 'axes' ha lo stesso metodo [' tick_params'] (http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.tick_params). –

34

v'è una migliore, e più semplice, soluzione che quella data da John Vinyard. Utilizzare NullLocator:

import matplotlib.pyplot as plt 

plt.plot(range(10)) 
plt.gca().xaxis.set_major_locator(plt.NullLocator()) 
plt.show() 
plt.savefig('plot') 

Speranza che aiuta.

+15

"Meglio" è discutibile, ma +1 per l'alternativa. – bernie

20

Prova questo per rimuovere le etichette (ma non le zecche):

import matplotlib.pyplot as plt 

plt.setp(ax.get_xticklabels(), visible=False) 

example

+1

'setp' è in modalità pylab, non può essere utilizzato contro singoli assi – dashesy

54

Non esattamente quello che il PO chiedeva, ma un modo semplice per eliminare tutte le linee assi, zecche, etichette è chiamare semplicemente:

plt.axis('off') 
+6

Ciò di cui avevo bisogno, grazie. La versione orientata agli oggetti sarebbe 'ax.axis ('off')' su un'istanza di assi esistente. – PlasmaBinturong

41

Ecco una soluzione alternativa che ho trovato sul matplotlib mailing list:

import matplotlib.pylab as plt 

x = range(1000) 
ax = plt.axes() 
ax.semilogx(x, x) 
ax.xaxis.set_ticks_position('none') 

graph

37

In alternativa, è possibile passare una posizione di segno di spunta vuota ed etichetta come

plt.xticks([], [])