303 votes

Comment changer la couleur de fond du graphique ?

Je suis en train de créer un nuage de points dans matplotlib et j'ai besoin de changer l'arrière-plan du graphique réel en noir. Je sais comment changer la couleur de fond du graphique en utilisant :

fig = plt.figure()
fig.patch.set_facecolor('xkcd:mint green')

entrer la description de l'image ici

Mon problème est que cela change la couleur de l'espace autour du graphique. Comment puis-je changer la couleur de fond réelle du graphique ?

12 votes

Juste pour information, en plus de ce qu'a dit @Evert, vous pourriez simplement utiliser ax.patch.set_facecolor('noir') (où ax est l'instance des axes). fig.patch est l'arrière-plan de la figure et ax.patch est l'arrière-plan des axes.

299voto

Nick T Points 5466

Utilisez la méthode set_facecolor(color) de l'objet axes, que vous avez créé de l'une des manières suivantes :

  • Vous avez créé une figure et un ou plusieurs axes ensemble

    fig, ax = plt.subplots(nrows=1, ncols=1)
  • Vous avez créé une figure, puis un ou plusieurs axes après

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
  • Vous avez utilisé l'API étatique (si vous faites plus que quelques lignes, et surtout si vous avez plusieurs tracés, les méthodes orientées objet ci-dessus rendent la vie plus facile car vous pouvez vous référer à des figures spécifiques, tracer sur certains axes et personnaliser chaque)

    plt.plot(...)
    ax = plt.gca()

Ensuite, vous pouvez utiliser set_facecolor :

ax.set_facecolor('xkcd:salmon')
ax.set_facecolor((1.0, 0.47, 0.42))

exemple de graphique avec un fond rose sur les axes

En guise de rappel pour les couleurs possibles :

matplotlib.colors

Matplotlib reconnaît les formats suivants pour spécifier une couleur :

  • un tuple RGB ou RGBA de valeurs float dans [0, 1] (par exemple, (0.1, 0.2, 0.5) ou (0.1, 0.2, 0.5, 0.3)) ;
  • une chaîne hexadécimale RGB ou RGBA (par exemple, '#0F0F0F' ou '#0F0F0F0F') ;
  • une représentation sous forme de chaîne d'une valeur float dans [0, 1] inclus pour le niveau de gris (par exemple, '0.5') ;
  • un des {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'} ;
  • un nom de couleur X11/CSS4 ;
  • un nom de l'enquête sur les couleurs de xkcd ; préfixé par 'xkcd:' (par exemple, 'xkcd:sky blue') ;
  • un des {'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'} qui sont les couleurs Tableau de la palette catégorielle 'T10' (qui est le cycle de couleurs par défaut) ;
  • une spécification de couleur “CN”, c'est-à-dire 'C' suivi d'un seul chiffre, qui est un index dans le cycle des propriétés par défaut (matplotlib.rcParams['axes.prop_cycle']) ; l'indexation se produit au moment de la création de l'élément graphique et passe en noir par défaut si le cycle ne comprend pas de couleur.

Toutes les spécifications de couleur sous forme de chaîne, sauf “CN”, ne sont pas sensibles à la casse.

0 votes

Si vous connaissez une autre manière courante de générer des axes, faites-le moi savoir.

0 votes

On dirait que cette méthode a disparu à un moment donné au cours des 3 dernières années... MethodNotFound

0 votes

@Demis cette méthode a été ajoutée ces dernières années. Voir la réponse de ImportanceOfBeingEarnest pour savoir comment le faire dans les anciennes versions.

68voto

BurlyPaulson Points 599

Une méthode consiste à définir manuellement la couleur d'arrière-plan par défaut pour l'axe dans votre script (voir Personnalisation de matplotlib):

import matplotlib.pyplot as plt
plt.rcParams['axes.facecolor'] = 'black'

Ceci s'oppose à la méthode de Nick T qui modifie la couleur d'arrière-plan pour un objet axes spécifique. Réinitialiser les paramètres par défaut est utile si vous réalisez plusieurs graphiques différents avec des styles similaires et que vous ne voulez pas continuellement modifier différents objets axes.

Remarque : L'équivalent pour

fig = plt.figure()
fig.patch.set_facecolor('black')

de votre question est :

plt.rcParams['figure.facecolor'] = 'black'

0 votes

42voto

Evert Points 4285

Quelque chose comme ça ? Utilisez le mot-clé axisbg pour subplot:

>>> from matplotlib.figure import Figure
>>> from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
>>> figure = Figure()
>>> canvas = FigureCanvas(figure)
>>> axes = figure.add_subplot(1, 1, 1, axisbg='red')
>>> axes.plot([1,2,3])
[]
>>> canvas.print_figure('red-bg.png')

(Bien entendu, ce n'est pas un graphique en nuage de points, et il n'a pas un arrière-plan noir.)

entrez la description de l'image ici

3 votes

J'ai eu du succès avec plt.subplot('111', axisbg='black') avant les commandes de traçage, en utilisant Windows.

13 votes

Les balises axis_bg axis_bgcolor ont été dépréciées dans matplotlib 2.0.0 et supprimées dans matplotlib 2.2.0.

21voto

Mathias711 Points 361

Si vous avez déjà l'objet axes, comme dans la réponse de Nick T, vous pouvez également utiliser

 ax.patch.set_facecolor('black')

19voto

Leigh Points 31

Réponse plus simple:

ax = plt.axes()
ax.set_facecolor('argent)

0 votes

C'est la meilleure réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X