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.
Riesci a rimuovere anche le zecche dalla assi alto a destra e dal file matplotlibrc? – jkokorian
@jkokorian: Nella prossima versione 2.0.0 di matplotlib, puoi impostare le opzioni 'xtick.top' e' ytick.right'. – Roun