2010-08-09 12 views

risposta

15

Al fine di nascondere il top spine di una sottotrama a destra e, è necessario sia per impostare il colore delle spine rilevanti per 'none', nonché impostare la posizione di spunta su 'left' per xtick e 'bottom' per il codice (per nascondere i segni di spunta e le spine).

Sfortunatamente, nessuno di questi è attualmente accessibile tramite matplotlibrc. I parametri specificati in matplotlibrc vengono convalidati e quindi memorizzati in un dict denominato rcParams. Spetta quindi ai singoli moduli verificare una chiave in questo dict il cui valore agirà come predefinito. Se non lo controllano per una delle loro opzioni, tale opzione non è modificabile tramite il file rc.

A causa della natura del sistema rc, e il modo in cui spine sono scritte, che modifica il codice per far sì che la non sarebbe semplice:

Spine attualmente ottengono il loro colore attraverso lo stesso rc parametro utilizzato per definire colori degli assi; non è possibile impostarlo su 'none' senza nascondere tutto il disegno dell'asse. Sono anche agnostici sul fatto che siano top, right, left o bottom — questi sono in realtà solo quattro spine separate memorizzate in un dettato. I singoli oggetti della colonna vertebrale non sanno quale parte della trama essi compongono, quindi non puoi semplicemente aggiungere nuovi parametri rc e assegnare quello corretto durante l'inizializzazione della colonna vertebrale.

self.set_edgecolor(rcParams['axes.edgecolor']) 

(./matplotlib/lib/matplotlib/spines.py, __init __(), linea 54)

Se si dispone di una grande quantità di codice esistente, in modo tale che l'aggiunta l'asse i parametri manualmente a ciascuno sarebbero troppo onerosi, si potrebbe alternativamente utilizzare una funzione di supporto per scorrere tutti gli oggetti dell'Asse e impostare i valori per voi.

Ecco un esempio:

import matplotlib 
import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.pyplot import show 

# Set up a default, sample figure. 
fig = plt.figure() 
x = np.linspace(-np.pi,np.pi,100) 
y = 2*np.sin(x) 

ax = fig.add_subplot(1,2,2) 
ax.plot(x,y) 
ax.set_title('Normal Spines') 

def hide_spines(): 
    """Hides the top and rightmost axis spines from view for all active 
    figures and their respective axes.""" 

    # Retrieve a list of all current figures. 
    figures = [x for x in matplotlib._pylab_helpers.Gcf.get_all_fig_managers()] 
    for figure in figures: 
     # Get all Axis instances related to the figure. 
     for ax in figure.canvas.figure.get_axes(): 
      # Disable spines. 
      ax.spines['right'].set_color('none') 
      ax.spines['top'].set_color('none') 
      # Disable ticks. 
      ax.xaxis.set_ticks_position('bottom') 
      ax.yaxis.set_ticks_position('left') 

hide_spines() 
show() 

Basta chiamare hide_spines() prima show(), e sarà nasconderli in tutte le figure che show() display. Non riesco a pensare ad un modo più semplice per modificare un gran numero di cifre, al di fuori di passare il tempo per correggere matplotlib e aggiungere il supporto rc per le opzioni necessarie.

13

Per rendere matplotlib non attirare spine superiore e di destra, si può impostare il seguente nel file di matplotlibrc

axes.spines.right : False 
axes.spines.top : False 
+0

Riesci a rimuovere anche le zecche dalla assi alto a destra e dal file matplotlibrc? – jkokorian

+0

@jkokorian: Nella prossima versione 2.0.0 di matplotlib, puoi impostare le opzioni 'xtick.top' e' ytick.right'. – Roun

Problemi correlati