python - xticks - xlabel subplot matplotlib




Nascondere il testo dell'asse nei grafici matplotlib (4)

Sto cercando di tracciare una figura senza segni di graduazione o numeri su nessuno degli assi (io 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.

Questo può essere vago, ma il seguente esempio semplificato evidenzia il problema, con "6.18" come valore offendente 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 così!) Ho guardato attraverso matplotlib.axis.XAxis e non riesco a trovare nulla di appropriato

  2. Come posso far scomparire N (cioè 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.


In realtà non ero in grado di eseguire il rendering di un'immagine senza bordi o dati sugli assi in base a nessuno dei frammenti di codice (anche quello accettato alla risposta). Dopo aver scavato attraverso 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 chiamata tick_params per disattivare fondamentalmente qualsiasi informazione extra che potrebbe essere resa e ho un grafico perfetto nel mio file di output :). Spero che questo ti aiuti!


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

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

Oppure puoi impostare i segni di spunta su una lista vuota:

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

In questa seconda opzione, puoi ancora usare plt.xlabel() e plt.ylabel() per aggiungere etichette agli assi.


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([])

Facendo set_visible(False) o set_ticks([]) nasconderai anche le linee della griglia.


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

imposta il principale formattatore per l'asse x

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




plot