2009-05-29 31 views

risposta

44

Questa è la soluzione suggerita Matplotlib 2.0 dal sito ufficiale HERE:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0, 2*np.pi, 100) 
y = np.sin(x) 

ax = plt.subplot(111) 
ax.plot(x, y) 

# Hide the right and top spines 
ax.spines['right'].set_visible(False) 
ax.spines['top'].set_visible(False) 

# Only show ticks on the left and bottom spines 
ax.yaxis.set_ticks_position('left') 
ax.xaxis.set_ticks_position('bottom') 

plt.show() 

enter image description here

+2

Questa è la migliore della risposta accettata nelle versioni più recenti di matplotlib. – ffledgling

32

[modifica] matplotlib ora (2013-10) nella versione 1.3.0 che include questo

Questa capacità è stato effettivamente appena aggiunto, ed è necessario la versione Subversion per esso. È possibile vedere il codice di esempio here.

Sto aggiornando per dire che ora c'è un migliore example online. C'è ancora bisogno della versione di Subversion, tuttavia non è stata ancora rilasciata una versione.

[modifica] Matplotlib 0.99.0 RC1 è stato appena rilasciato e include questa funzionalità.

+0

assicuratevi di leggere l'avviso a http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.html sul supporto del segno di spunta che è incompleto prima di provare e usare quello sopra con e.g le etichette ruotate però! – timday

+2

Assicurati di essere aggiornato con le mie modifiche. – tacaswell

+0

Sembra che dipenda da come si costruisce l'asse. Gli assi generati da '' mpl.subplots'' non possono essere usati in questo modo? –

7

Se non avete bisogno di zecche e quali (ad esempio per il tracciato illustrazioni qualitativi) si potrebbe anche utilizzare questa soluzione rapida:

Fai l'asse invisibile (per esempio con plt.gca().axison = False) e quindi disegnare manualmente con plt.arrow.

+1

sembra rimuovere le spine ma lasciare i segni di spunta in posizione. Qualche idea su come rimuovere anche le zecche? –

+1

@Rob: hai ragione, in realtà ho usato una soluzione diversa nella sceneggiatura a cui stavo pensando. Ho cambiato la mia risposta, ora dovrebbe funzionare, ma in generale la soluzione accettata sopra è migliore. – nikow

56

alternativa, questo

def simpleaxis(ax): 
    ax.spines['top'].set_visible(False) 
    ax.spines['right'].set_visible(False) 
    ax.get_xaxis().tick_bottom() 
    ax.get_yaxis().tick_left() 

sembra per ottenere lo stesso effetto su un asse senza perdere il sostegno etichetta ruotato.

(Matplotlib 1.0.1; soluzione ispirata a this).

-4

Questo è molto più rudimentale, ma potrebbe fare il trucco:

remove_border()

0

(Questo è più di un commento di estensione, oltre alla comprehe risposte nsive qui)


notare che possiamo nascondere ciascuno di questi tre elementi in modo indipendente l'uno dall'altro.

  • Per nascondere il bordo (alias "colonna vertebrale"): ax.set_frame_on(False) o ax.spines['top'].set_visible(False)

  • Per nascondere le zecche: ax.tick_params(top=False)

  • Per nascondere ° e le etichette: ax.tick_params(labeltop=False)

Problemi correlati