Cambiar el color del eje, las marcas y las etiquetas de un gráfico en matplotlib

Respuestas:

171

Como ejemplo rápido (usando un método un poco más limpio que la pregunta potencialmente duplicada):

import matplotlib.pyplot as plt

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

ax.plot(range(10))
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')

ax.spines['bottom'].set_color('red')
ax.spines['top'].set_color('red')
ax.xaxis.label.set_color('red')
ax.tick_params(axis='x', colors='red')

plt.show()

texto alternativo

Joe Kington
fuente
Gracias hasta ahora. ax.tick_params (axis = 'x', colors = 'red') produce un error AxesSubplot sin atributo 'tick_params'. ¿Sabes por qué?
Richard Durr
14
Hmm ... Eso es extraño ... ¿Qué versión de matplotlib estás usando? Una solución alternativa es hacer [t.set_color('red') for t in ax.xaxis.get_ticklines()]y [t.set_color('red') for t in ax.xaxis.get_ticklabels()].
Joe Kington
33

Si tiene varias figuras o subtramas que desea modificar, puede ser útil usar el administrador de contexto matplotlib para cambiar el color, en lugar de cambiar cada una individualmente. El administrador de contexto le permite cambiar temporalmente los parámetros rc solo para el código sangrado inmediatamente siguiente, pero no afecta los parámetros rc globales.

Este fragmento produce dos figuras, la primera con colores modificados para el eje, ticks y ticklabels, y la segunda con los parámetros rc predeterminados.

import matplotlib.pyplot as plt
with plt.rc_context({'axes.edgecolor':'orange', 'xtick.color':'red', 'ytick.color':'green', 'figure.facecolor':'white'}):
    # Temporary rc parameters in effect
    fig, (ax1, ax2) = plt.subplots(1,2)
    ax1.plot(range(10))
    ax2.plot(range(10))
# Back to default rc parameters
fig, ax = plt.subplots()
ax.plot(range(10))

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Puede escribir plt.rcParamspara ver todos los parámetros rc disponibles y usar la comprensión de lista para buscar palabras clave:

# Search for all parameters containing the word 'color'
[(param, value) for param, value in plt.rcParams.items() if 'color' in param]
joelostblom
fuente
0

motivado por colaboradores anteriores, este es un ejemplo de tres ejes.

import matplotlib.pyplot as plt

x_values1=[1,2,3,4,5]
y_values1=[1,2,2,4,1]

x_values2=[-1000,-800,-600,-400,-200]
y_values2=[10,20,39,40,50]

x_values3=[150,200,250,300,350]
y_values3=[-10,-20,-30,-40,-50]


fig=plt.figure()
ax=fig.add_subplot(111, label="1")
ax2=fig.add_subplot(111, label="2", frame_on=False)
ax3=fig.add_subplot(111, label="3", frame_on=False)

ax.plot(x_values1, y_values1, color="C0")
ax.set_xlabel("x label 1", color="C0")
ax.set_ylabel("y label 1", color="C0")
ax.tick_params(axis='x', colors="C0")
ax.tick_params(axis='y', colors="C0")

ax2.scatter(x_values2, y_values2, color="C1")
ax2.set_xlabel('x label 2', color="C1") 
ax2.xaxis.set_label_position('bottom') # set the position of the second x-axis to bottom
ax2.spines['bottom'].set_position(('outward', 36))
ax2.tick_params(axis='x', colors="C1")
ax2.set_ylabel('y label 2', color="C1")       
ax2.yaxis.tick_right()
ax2.yaxis.set_label_position('right') 
ax2.tick_params(axis='y', colors="C1")

ax3.plot(x_values3, y_values3, color="C2")
ax3.set_xlabel('x label 3', color='C2')
ax3.xaxis.set_label_position('bottom')
ax3.spines['bottom'].set_position(('outward', 72))
ax3.tick_params(axis='x', colors='C2')
ax3.set_ylabel('y label 3', color='C2')
ax3.yaxis.tick_right()
ax3.yaxis.set_label_position('right') 
ax3.spines['right'].set_position(('outward', 36))
ax3.tick_params(axis='y', colors='C2')


plt.show()
cosmos
fuente