Rimuovere xticks in un grafico matplotlib?


290

Ho una trama della semilogia e vorrei rimuovere gli xticks. Provai:

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

La griglia scompare (ok), ma rimangono dei piccoli tick (al posto dei tick principali). Come rimuoverli?


Alcune delle soluzioni non hanno funzionato per me. Ma solo un piccolo cambiamento degli esempi qui: ax.set_xticks([], [])ed è risolto ...
TravelTrader

Risposte:


464

Il tick_paramsmetodo è molto utile per cose come questa. Questo codice disattiva i segni di spunta maggiori e minori 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=False,      # ticks along the bottom edge are off
    top=False,         # ticks along the top edge are off
    labelbottom=False) # labels along the bottom edge are off
plt.show()
plt.savefig('plot')
plt.clf()

inserisci qui la descrizione dell'immagine


87
Apprezzo il modo in cui questo non solo risponde alla domanda, ma fornisce un modello per attivare / disattivare diverse cose. Questo vale per entrambi gli assi xey:plt.tick_params(axis='both', which='both', bottom='off', top='off', labelbottom='off', right='off', left='off', labelleft='off')
Steven C. Howell,

2
E se fosse una trama 3D?
tommy.carstensen,

38
Questa è un'ottima risposta Per chi cerca la versione oo, axesha lo stesso tick_paramsmetodo.
Fisico pazzo,

22
Nelle versioni più recenti di matplotlib, è necessario sostituire 'on'con Truee 'off'con False.
BallpointBen,

1
La risposta deve essere aggiornata per l'interfaccia OOP e la sintassi della versione più recente.
ifly6

143

Non esattamente quello che l'OP stava chiedendo, ma un modo semplice per disabilitare tutte le linee degli assi, i tick e le etichette è semplicemente chiamare:

plt.axis('off')

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

5
come solo xaxis?
qrtLs

83

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

# for matplotlib.pyplot
# ---------------------
plt.xticks([], [])
# for axis object
# ---------------
# from Anakhand May 5 at 13:08
# for major ticks
ax.set_xticks([])
# for minor ticks
ax.set_xticks([], minor=True)

8
Se disponi di un'istanza dell'asse esistente, ad esempio ax, puoi utilizzare:ax.set_xticks([], [])
Guilherme Salomé

@ GuilhermeSalomé ora genera un avviso: "Il passaggio del parametro minore di set_xticks () in modo posizionale è deprecato da Matplotlib 3.2; il parametro diventerà solo parola chiave due versioni secondarie in seguito". Qual è la soluzione corretta ora?
Rylan Schaeffer,

2
@RylanSchaeffer ax.set_xticks([])per le zecche maggiori, ax.set_xticks([], minor=True)per le zecche minori. Gli equivalenti con pyplotare plt.xticks([])e plt.xticks([], minor=True).
Anakhand,

68

Ecco una soluzione alternativa che ho trovato nella mailing list di matplotlib :

import matplotlib.pylab as plt

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

grafico


42

C'è una soluzione migliore e più semplice di 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')

Spero che aiuti.


22
"Meglio" è discutibile, ma +1 per l'alternativa.
Mechanical_meat

Una variante di questa soluzione ha funzionato anche per me quando l'obiettivo era rimuovere solo xtick da un riquadro "ingrandito", mantenendoli nella trama principale. Utilizzando axins.xaxis.set_major_locator(plt.NullLocator()), dov'è axinsl'oggetto restituito da axins = zoomed_inset_axes()(funzione importata da mpl_toolkits.axes_grid1.inset_locator).
Dennis Soemers,

28

Prova questo per rimuovere le etichette (ma non i segni di spunta):

import matplotlib.pyplot as plt

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

esempio


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

1
Che ne dici dell'interfaccia orientata agli oggetti?
ifly6

Questa è stata l'unica risposta che ha funzionato anche per le trame 3D per me. Grazie per questo!
Brent,

13

Questo frammento potrebbe aiutare a rimuovere solo gli xtick.

from matplotlib import pyplot as plt    
plt.xticks([])

Questo frammento potrebbe aiutare a rimuovere xticks e yticks entrambi.

from matplotlib import pyplot as plt    
plt.xticks([]),plt.yticks([])

3
# remove all the ticks (both axes), and tick labels on the Y axis
plt.tick_params(top='off', bottom='off', left='off', right='off', labelleft='off', labelbottom='on')

2
La versione orientata agli oggetti di questo èax.tick_params()
Marcelo Villa-Piñeros,

1
Inoltre, l'utilizzo offe onè deprecato. MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.
Marcelo Villa-Piñeros,

0

Quelli di voi che cercano un breve comando per disattivare tutti i tick e le etichette dovrebbero andare bene

plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=False, labelbottom=False)

che consente di digitare i boolrispettivi parametri dalla versione matplotlib> = 2.1.1

Per le impostazioni personalizzate di tick, i documenti sono utili:

https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.tick_params.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.