webentwicklung-frage-antwort-db.com.de

Wie ändere ich die Hintergrundfarbe des Plots?

Ich mache ein Punktdiagramm in Matplotlib und muss den Hintergrund des tatsächlichen Diagramms in Schwarz ändern. Ich weiß, wie ich die Gesichtsfarbe des Plots ändern kann:

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

enter image description here

Mein Problem ist, dass dies die Farbe des Raums um das Grundstück ändert. Wie ändere ich die tatsächliche Hintergrundfarbe des Plots?

166
user1764386

Verwenden Sie die set_facecolor(color) -Methode des axes -Objekts , das Sie auf eine der folgenden Arten erstellt haben:

  • Sie haben eine Figur und eine Achse/Achsen zusammen erstellt

    fig, ax = plt.subplots(nrows=1, ncols=1)
    
  • Sie haben eine Figur erstellt, dann Achse (n) später

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
    
  • Sie haben die stateful-API verwendet (wenn Sie mehr als ein paar Zeilen ausführen und insbesondere wenn Sie mehrere Diagramme haben, erleichtern die obigen objektorientierten Methoden das Leben, da Sie auf bestimmte verweisen können Figuren, Plotten auf bestimmten Achsen und anpassen entweder)

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

Dann können Sie set_facecolor:

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

example plot with pink background on the axes

Zur Auffrischung, welche Farben sein können:

matplotlib.colors

Matplotlib erkennt die folgenden Formate, um eine Farbe anzugeben:

  • ein RGB- oder RGBA-Tupel mit Float-Werten in [0, 1] (z.B., (0.1, 0.2, 0.5) oder (0.1, 0.2, 0.5, 0.3));
  • eine hexadezimale RGB- oder RGBA-Zeichenfolge (z. B. '#0F0F0F' oder '#0F0F0F0F');
  • eine Zeichenfolgendarstellung eines Gleitkommawerts in [0, 1] einschließlich für Graustufe (z. B. '0.5');
  • einer von {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • einen X11/CSS4-Farbnamen;
  • ein Name aus der xkcd Farbübersicht ; vorangestellt mit 'xkcd:' (z.B., 'xkcd:sky blue');
  • einer von {'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'} das sind die Tableau-Farben aus der kategorialen Palette "T10" (das ist der Standardfarbzyklus);
  • eine "CN" -Farbspezifikation, d. h. "C", gefolgt von einer einzelnen Ziffer, die ein Index für den Standardeigenschaftszyklus ist (matplotlib.rcParams['axes.prop_cycle']); Die Indizierung erfolgt zum Zeitpunkt der Künstlererstellung und ist standardmäßig schwarz, wenn der Zyklus keine Farbe enthält.

Bei allen Zeichenfolgenspezifikationen der Farbe mit Ausnahme von „CN“ wird die Groß- und Kleinschreibung nicht berücksichtigt.

175
Nick T

Etwas wie das? Verwenden Sie das Schlüsselwort axisbg für 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')

(Zugegeben, kein Streudiagramm und kein schwarzer Hintergrund.)

enter image description here

38
user707650

Eine Methode besteht darin, den Standard für die Achsenhintergrundfarbe in Ihrem Skript manuell festzulegen (siehe Anpassen von matplotlib ):

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

Dies steht im Gegensatz zu der Methode von Nick T, mit der die Hintergrundfarbe für ein bestimmtes axes -Objekt geändert wird. Das Zurücksetzen der Standardeinstellungen ist nützlich, wenn Sie mehrere verschiedene Diagramme mit ähnlichen Stilen erstellen und nicht ständig andere axes Objekte ändern möchten.

Hinweis: Das Äquivalent für

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

von Ihrer Frage ist:

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

Wenn Sie bereits ein axes -Objekt haben, können Sie wie in Nick T 's answer auch verwenden

 ax.patch.set_facecolor('black')
11
Mathias711

Ein Vorschlag in anderen Antworten ist, ax.set_axis_bgcolor("red") zu verwenden. Dies ist jedoch veraltet und funktioniert nicht mit MatPlotLib> = v2.0.

Es gibt auch den Vorschlag, ax.patch.set_facecolor("red") zu verwenden (funktioniert auf MatPlotLib v1.5 und v2.2). Während dies gut funktioniert, ist eine noch einfachere Lösung für v2.0 + zu verwenden

ax.set_facecolor("red")

Am einfachsten ist es wahrscheinlich, die Farbe anzugeben, wenn Sie den Plot erstellen:

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

oder

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