303 votes

Python - modification de la couleur d'arrière-plan des tracés dans matplotlib

Je réalise un nuage de points avec matplotlib et j'ai besoin de changer l'arrière-plan du graphique actuel en noir. Je sais comment changer la couleur de la face du graphique en utilisant :

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

Le problème est que cela change la couleur de l'espace autour de la parcelle. Comment puis-je modifier la couleur d'arrière-plan réelle de la parcelle ?

12 votes

Pour votre information, en plus de ce que @Evert a dit, vous pourriez simplement utiliser ax.patch.set_facecolor('black') (où ax est l'instance des axes). fig.patch est le fond de la figure et ax.patch est l'arrière-plan des axes.

299voto

Nick T Points 5466

Si vous avez déjà le axes par exemple, si vous avez utilisé f, ax = plt.subplot() ou plt.subplots() ou vous pouvez simplement obtenir les axes actuels via ax = plt.gca() vous pouvez utiliser directement une de ses méthodes, set_axis_bgcolor :

ax.set_axis_bgcolor('red')
ax.set_axis_bgcolor((1, 0, 0))

0 votes

S'il existe un autre moyen courant 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 de l'axe dans votre script (cf. Personnaliser matplotlib ) :

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

Ceci est en contraste avec la méthode de Nick T qui change la couleur de l'arrière-plan pour un certain axes objet. La réinitialisation des valeurs par défaut est utile si vous réalisez plusieurs tracés différents avec des styles similaires et que vous ne souhaitez pas modifier sans cesse les différentes valeurs de l'objet. axes objets.

Note : 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 axisbg mot-clé 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')

(Je vous l'accorde, il ne s'agit pas d'un nuage de points, ni d'un fond noir).

enter image description here

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

Le site axis_bg axis_bgcolor ont été dépréciés dans matplotlib 2.0.0 et supprimés dans matplotlib 2.2.0.

21voto

Mathias711 Points 361

Si vous avez déjà axes comme dans Nick T Réponse de la Commission vous pouvez également utiliser

 ax.patch.set_facecolor('black')

19voto

Leigh Points 31

Réponse plus simple :

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

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