2010-02-01 21 views
212

Sto provando a tracciare una figura senza segni di graduazione o numeri su nessuno degli assi (uso gli assi nel senso tradizionale, non la nomenclatura matplotlib!). Un problema che ho riscontrato è dove matplotlib regola i ticklabels x (y) sottraendo un valore N, quindi aggiunge N alla fine dell'asse.Nascondere il testo dell'asse nei grafici matplotlib

Questo può essere vago, ma il seguente esempio semplificato mette in evidenza il problema, con '6.18' essere il valore illecito 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 è:

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

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

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

risposta

291

Invece di nascondere ogni elemento, è possibile nascondere l'intero asse:

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

In alternativa, è possibile impostare le zecche ad una lista vuota:

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

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

+1

Hey Ofri - che è grande, grazie, ma ora (solo per essere scomodo) cosa succede se voglio aggiungere un xlabel()? Altro che posizionare manualmente un widget di testo. – Dave

+0

modificato per rispondere alla tua domanda. –

+1

great - funziona come pubblicizzato, grazie! – Dave

141

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

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

Facendo set_visible(False) o set_ticks([]) sarà anche nascondere le linee della griglia.

+4

Un po 'in ritardo - ma meglio della risposta accettata – Floris

+0

questo elimina le etichette per * tutti * i sottotrammi che condividono quell'asse:/ – endolith

34

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

impostare la maggior formattatore 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? –

+3

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

12

non ero effettivamente in grado per rendere un'immagine senza bordi o dati asse basati su uno qualsiasi dei frammenti di codice qui (anche quello accettato alla risposta). Dopo aver scavato attraverso alcuni documentazione delle API, sono atterrato su 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 il tick_params chiamare a chiudere sostanzialmente verso il basso tutte le informazioni aggiuntive che potrebbero essere resi e ho un grafo perfetto nel mio file di output:). Spero che questo ti aiuti!

+0

Quando gli assi sono condivisi, le soluzioni basate su set_ticklabels si propagano su assi condivisi. Solo questa soluzione basata su tick_params funzionava bene per me. –

41

Se siete come me e non sempre recuperare gli assi, ax, quando si stampa la figura, quindi una soluzione semplice sarebbe quella di fare

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