2010-03-31 14 views
14

così, sembra non si può fare quanto segue (che genera un errore, dal momento che axes non ha un metodo set_linewidth):Impostazione `axes.linewidth` senza cambiare il dict globale` rcParams`

axes_style = {'linewidth':5} 
axes_rect = [0.1, 0.1, 0.9, 0.9] 

axes(axes_rect, **axes_style) 

e deve utilizzare il seguente trucco vecchio invece:

rcParams['axes.linewidth'] = 5 # set the value globally 

... # some code 

rcdefaults() # restore [global] defaults 

c'è un modo semplice/pulito (potrebbe essere una possibile impostare x - e y - assi parametri singolarmente, ecc)?

P.S. Se no, perché?

risposta

8

Sì, c'è un modo semplice e pulito per farlo.

Calling 'axhline' e 'axvline' da un'istanza asse sembra essere la tecnica approvata nella documentazione MPL.

In ogni caso, è semplice e fornisce un controllo preciso sull'aspetto degli assi.

Quindi, ad esempio, questo codice creerà un grafico e colora il verde dell'asse x e aumenterà la larghezza della linea dell'asse x da un valore predefinito di "1" a un valore di "4"; l'asse y è colorato in rosso e la larghezza della linea dell'asse y è aumentata da "1" a "8".

from matplotlib import pyplot as PLT 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 

ax1.axhline(linewidth=4, color="g")  # inc. width of x-axis and color it green 
ax1.axvline(linewidth=4, color="r")  # inc. width of y-axis and color it red 

PLT.show() 

La funzione axhline/axvline accetta argomenti aggiuntivi che dovrebbero permettere di fare qualsiasi più o meno quello che vuoi esteticamente, in particolare, una delle ~ proprietà matplotlib.lines.Line2D sono kwargs validi (ad esempio, 'alpha' , 'linestyle', capstyle, joinstyle).

+0

Grazie mille, ho deciso di dargli uno sguardo più attento in paio d'ore. – mlvljr

+0

Grazie ancora, accettato. – mlvljr

+1

Пожалуйста! Sempre bello incontrare colleghi codificatori russi. – doug

39

La risposta di cui sopra non funziona, come spiegato nei commenti. Suggerisco di usare spine.

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subplot(111) 

# you can change each line separately, like: 
#ax.spines['right'].set_linewidth(0.5) 
# to change all, just write: 

for axis in ['top','bottom','left','right']: 
    ax.spines[axis].set_linewidth(0.5) 

plt.show() 
# see more about spines at: 
#http://matplotlib.org/api/spines_api.html 
#http://matplotlib.org/examples/pylab_examples/multiple_yaxis_with_spines.html 
+1

Questa è la risposta giusta! –

6
plt.setp(ax.spines.values(), linewidth=5) 
Problemi correlati