Nascondere il testo dell'asse nei grafici a matrice


370

Sto cercando di tracciare una figura senza segni di spunta o numeri su uno degli assi (uso gli assi in senso tradizionale, non la nomenclatura matplotlib!). Un problema che ho riscontrato è dove matplotlib regola i segni di spunta x (y) sottraendo un valore N, quindi aggiunge N alla fine dell'asse.

Questo può essere vago, ma il seguente esempio semplificato evidenzia il problema, con "6.18" come valore offensivo di N:

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

Le tre cose che vorrei sapere sono:

  1. Come disattivare questo comportamento in primo luogo (anche se nella maggior parte dei casi è utile, non è sempre!) Ho guardato attraverso matplotlib.axis.XAxise non riesco a trovare nulla di appropriato

  2. Come posso far scomparire N (es. X.set_visible(False))

  3. C'è comunque un modo migliore per fare quanto sopra? La mia trama finale sarebbe una sottotrama 4x4 in una figura, se questo è rilevante.


Ho un piccolo dubbio se una qualsiasi delle risposte qui risponda effettivamente alla domanda. A me sembra che la domanda ponga come sbarazzarsi dell'offset . Eppure tutte le risposte mostrano vari modi per sbarazzarsi di tutti i segni di spunta. Se la domanda è stata sostituita dalle risposte, forse si dovrebbe modificare la domanda per chiedere a cosa le risposte forniscono soluzioni?
ImportanceOfBeingErnest

Risposte:


471

Invece di nascondere ogni elemento, puoi nascondere l'intero asse:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

In alternativa, è possibile impostare i segni di spunta su un elenco vuoto:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

In questa seconda opzione, è ancora possibile utilizzare plt.xlabel()e plt.ylabel()aggiungere etichette agli assi.


2
Ehi Ofri - è fantastico, grazie, ma ora (solo per essere imbarazzante) cosa succede se voglio aggiungere un xlabel ()? Oltre a posizionare manualmente un widget di testo.
Dave,

5
Come puoi estendere questo esempio a 3d? ax = plt.gca (proiezione = '3d'), ax.axes.get_zaxis (). set_visible (False) restituisce'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762

13
Questa risposta non consente di mostrare le linee della griglia. La risposta di @saullo castro però ...
evan54,

Il problema è che quando l'asse x è impostato su invisibile, la griglia scompare :( Modifica: ho appena visto la risposta di @Saullo Castro che ha risolto il problema.
Shailen,

1
@ user989762 Nel tuo caso questo metodo non funzionerà, nemmeno get_xaxis().set_visible(False). Penso che matplotlib in questo caso inizializzi alcuni parametri come se la trama fosse 2D.ax.set_zticks([])farà quello che vuoi
kon psych,

222

Se vuoi nascondere solo il testo dell'asse mantenendo le linee della griglia:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

Fare set_visible(False)o set_ticks([])nasconderà anche le linee della griglia.


4
questo elimina le etichette per tutte le sottotrame che condividono quell'asse: /
endolith

136

Se sei come me e non recuperi sempre gli assi ax, quando disegni la figura, allora una soluzione semplice sarebbe fare

plt.xticks([])
plt.yticks([])

56

Un po 'come un vecchio thread ma, questo sembra essere un metodo più veloce usando l'ultima versione di matplotlib:

imposta il formattatore principale per l'asse x

ax.xaxis.set_major_formatter(plt.NullFormatter())

1
Cosa succede se si desidera farlo solo per un singolo segno di spunta?
tommy.carstensen,

5
Sì, questo è utile solo per nascondere le etichette, perché .set_xticks ([]) rimuove anche i segni di spunta stessi.
zbyszek,

49

In realtà non sono stato in grado di eseguire il rendering di un'immagine senza bordi o dati degli assi basati su uno dei frammenti di codice qui (anche quello accettato nella risposta). Dopo aver analizzato la documentazione dell'API, sono arrivato a questo codice per rendere la mia immagine

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

Ho usato la tick_paramschiamata per chiudere praticamente qualsiasi informazione aggiuntiva che potrebbe essere resa e ho un grafico perfetto nel mio file di output.


1
Quando gli assi sono condivisi, le soluzioni basate su set_ticklabels si propagano sugli assi condivisi. Solo questa soluzione basata su tick_params funzionava bene per me.
Christian O'Reilly,

39

Ho codificato a colori questa figura per facilitare il processo.

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

inserisci qui la descrizione dell'immagine

Puoi avere il pieno controllo sulla figura usando questi comandi, per completare la risposta ho aggiunto anche il controllo sulle spline:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)

ax.set_xticklabels([])e ax.set_xticks([])non ha funzionato per me, ma ax.axes.get_xaxis().set_visible(False)ha funzionato.
Homero Esmeraldo,

2
questa dovrebbe essere la risposta accettata
Jason S

6

Quando si utilizza l'API orientata agli oggetti, il Axes oggetto ha due metodi utili per rimuovere il testo dell'asse set_xticklabels()e set_xticks().

Supponi di creare una trama usando

fig, ax = plt.subplots(1)
ax.plot(x, y)

Se si desidera semplicemente rimuovere le etichette di spunta, è possibile utilizzare

ax.set_xticklabels([])

o per rimuovere completamente le zecche, è possibile utilizzare

ax.set_xticks([])

Questi metodi sono utili per specificare esattamente dove desideri i segni di spunta e come li vuoi etichettare. Passare un elenco vuoto comporta rispettivamente nessun segno di spunta o nessuna etichetta.


2

Un trucco potrebbe essere l'impostazione del colore delle etichette tick su bianco per nasconderlo!

plt.xticks(color='w')
plt.yticks(color='w')
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.