2010-03-31 15 views
14

Por lo tanto, parece que no se puede hacer lo siguiente (se activa un error, ya que axes no tiene un método set_linewidth):Configuración `axes.linewidth` sin cambiar el` dict mundial rcParams`

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

axes(axes_rect, **axes_style) 

y tiene que utilizar el siguiente truco de edad en su lugar:

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

... # some code 

rcdefaults() # restore [global] defaults 

¿hay una manera fácil/limpia (puede ser uno puede establecer x - y y - ejes parámetros de forma individual, etc.)?

P.S. Si no, ¿por qué?

Respuesta

8

Sí, hay una manera fácil y limpia de hacerlo.

Calling 'axhline' y 'axvline' desde una instancia eje parece ser la técnica refrendado en la Documentación de MPL.

En cualquier caso, es simple y le da un control detallado sobre el aspecto de los ejes.

Así, por ejemplo, este código creará un trazado y coloreará el eje x verde y aumentará el ancho de línea del eje x desde un valor predeterminado de "1" a un valor de "4"; el eje y es de color rojo y el ancho de la línea del eje y se incrementa de "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 función axhline/axvline acepta argumentos adicionales que debería permitir que lo hace cualquier casi todo lo que desea estéticamente, en particular, ninguna de las propiedades ~ matplotlib.lines.Line2D son kwargs válidos (por ejemplo, 'alfa' , 'linestyle', capstyle, joinstyle).

+0

Muchas gracias, voy a darle un vistazo más de cerca en un par de horas. – mlvljr

+0

Gracias de nuevo, aceptado. – mlvljr

+1

Пожалуйста! Siempre es bueno conocer a otros codificadores rusos. – doug

39

La respuesta anterior no funciona, como se explica en los comentarios. Sugiero usar espinas.

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

¡Esa es la respuesta correcta! –

6
plt.setp(ax.spines.values(), linewidth=5) 
Cuestiones relacionadas