Changer la couleur de l'axe, des graduations et des étiquettes pour un tracé dans matplotlib

Réponses:

165

À titre d'exemple rapide (en utilisant une méthode légèrement plus propre que la question potentiellement dupliquée):

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()

texte alternatif

Joe Kington
la source
Merci jusqu'à présent. ax.tick_params (axis = 'x', colors = 'red') produit une erreur AxesSubplot n'a pas d'attribut d'erreur 'tick_params'. Est-ce que tu sais pourquoi?
Richard Durr
14
Hmm ... C'est étrange ... Quelle version de matplotlib utilisez-vous? Une solution de contournement consiste à faire [t.set_color('red') for t in ax.xaxis.get_ticklines()]et [t.set_color('red') for t in ax.xaxis.get_ticklabels()].
Joe Kington
32

Si vous avez plusieurs figures ou sous-graphiques à modifier, il peut être utile d'utiliser le gestionnaire de contexte matplotlib pour changer la couleur, au lieu de changer chacun d'eux individuellement. Le gestionnaire de contexte vous permet de modifier temporairement les paramètres rc uniquement pour le code indenté immédiatement suivant, mais n'affecte pas les paramètres rc globaux.

Cet extrait donne deux chiffres, le premier avec des couleurs modifiées pour l'axe, des graduations et des graduations, et le second avec les paramètres rc par défaut.

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))

entrez la description de l'image ici

entrez la description de l'image ici

Vous pouvez taper plt.rcParamspour afficher tous les paramètres rc disponibles et utiliser la compréhension de liste pour rechercher des mots-clés:

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

motivé par les précédents contributeurs, il s'agit d'un exemple de trois axes.

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
la source