web-dev-qa-db-fra.com

Comment changer la couleur de fond de la parcelle?

Je suis en train de faire un nuage de points dans matplotlib et j'ai besoin de changer l'arrière-plan du diagramme en noir. Je sais comment changer la couleur du visage de l'intrigue en utilisant:

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

enter image description here

Mon problème est que cela change la couleur de l'espace autour de l'intrigue. Comment changer la couleur de fond réelle de l'intrigue?

166
user1764386

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

  • Vous avez créé une figure et un axe/es ensemble

    fig, ax = plt.subplots(nrows=1, ncols=1)
    
  • Vous avez créé une figure, puis axe/es plus tard

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

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

example plot with pink background on the axes

En guise de rappel pour savoir quelles couleurs peuvent être:

matplotlib.colors

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

  • un tuple RVB ou RGBA de valeurs flottantes dans [0, 1] (par exemple, (0.1, 0.2, 0.5) ou (0.1, 0.2, 0.5, 0.3));
  • une chaîne hexagonale RVB ou RGBA (par exemple, '#0F0F0F' ou '#0F0F0F0F');
  • une représentation sous forme de chaîne d'une valeur flottante dans [0, 1] inclus pour le niveau de gris (par exemple, '0.5');
  • un de {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • un nom de couleur X11/CSS4;
  • un nom tiré de enquête sur les couleurs xkcd ; préfixé par 'xkcd:' (par exemple, 'xkcd:sky blue');
  • l’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égorique ‘T10’ (qui correspond au cycle de couleurs par défaut);
  • une spécification de couleur "CN", c'est-à-dire "C" suivie d'un chiffre, qui est un index dans le cycle de propriétés par défaut (matplotlib.rcParams['axes.prop_cycle']); l'indexation a lieu au moment de la création de l'artiste et est définie par défaut en noir si le cycle n'inclut pas de couleur.

Toutes les spécifications de couleur des chaînes, autres que “CN”, ne respectent pas la casse.

175
Nick T

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])
[<matplotlib.lines.Line2D object at 0x2827e50>]
>>> canvas.print_figure('red-bg.png')

(Accordé, pas un nuage de points, et pas un fond noir.)

enter image description here

38
user707650

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

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

Ceci contraste avec la méthode de Nick T qui modifie la couleur de fond d'un objet axes spécifique. Il est utile de réinitialiser les valeurs par défaut si vous créez plusieurs tracés différents avec des styles similaires et que vous ne souhaitez pas modifier en permanence différents objets axes.

Remarque: l'équivalent de

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

de votre question est:

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

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')
11
Mathias711

Une suggestion dans d'autres réponses consiste à utiliser ax.set_axis_bgcolor("red"). Toutefois, ceci est obsolète et ne fonctionne pas sur MatPlotLib> = v2.0.

Il est également suggéré d'utiliser ax.patch.set_facecolor("red") (fonctionne à la fois sur MatPlotLib v1.5 et v2.2). Bien que cela fonctionne bien, une solution encore plus simple pour v2.0 + consiste à utiliser

ax.set_facecolor("red")

Le plus simple est probablement de fournir la couleur lorsque vous créez le tracé:

fig1 = plt.figure(facecolor=(1, 1, 1))

ou

fig1, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, facecolor=(1, 1, 1))
2
Flonks