Bagaimana cara mengubah warna latar belakang plot?

226

Saya membuat plot pencar di matplotlib dan perlu mengubah latar belakang plot yang sebenarnya menjadi hitam. Saya tahu cara mengubah warna wajah plot menggunakan:

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

masukkan deskripsi gambar di sini

Masalah saya adalah ini mengubah warna ruang di sekitar plot. Bagaimana cara mengubah warna latar belakang plot yang sebenarnya?

pengguna1764386
sumber
9
Hanya FYI, di samping apa yang dikatakan @Evert, Anda bisa menggunakan ax.patch.set_facecolor('black')(di mana axinstance sumbu). fig.patchadalah latar belakang gambar dan ax.patchlatar belakang sumbu.
Joe Kington

Jawaban:

230

Gunakan set_facecolor(color)metode axesobjek , yang telah Anda buat dengan salah satu cara berikut:

  • Anda membuat angka dan poros bersama

    fig, ax = plt.subplots(nrows=1, ncols=1)
  • Anda membuat gambar, lalu poros / es nanti

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
  • Anda menggunakan API stateful (jika Anda melakukan apa pun lebih dari beberapa baris, dan terutama jika Anda memiliki banyak plot, metode berorientasi objek di atas membuat hidup lebih mudah karena Anda dapat merujuk pada angka tertentu, plot pada sumbu tertentu, dan menyesuaikan antara)

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

Maka Anda dapat menggunakan set_facecolor:

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

contoh plot dengan latar belakang merah muda pada sumbu

Sebagai penyegar untuk warna apa yang bisa:

matplotlib.colors

Matplotlib mengenali format berikut untuk menentukan warna:

  • tuple RGB atau RGBA dari nilai float di [0, 1](misalnya, (0.1, 0.2, 0.5)atau (0.1, 0.2, 0.5, 0.3));
  • string hex RGB atau RGBA (misalnya, '#0F0F0F'atau '#0F0F0F0F');
  • representasi string dari nilai float [0, 1]termasuk untuk tingkat abu-abu (misalnya, '0.5');
  • salah satu dari {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • nama warna X11 / CSS4;
  • nama dari survei warna xkcd ; diawali dengan 'xkcd:'(misalnya, 'xkcd:sky blue');
  • salah {'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}satunya adalah Tableau Colors dari palet kategori 'T10' (yang merupakan siklus warna default);
  • spesifikasi warna "CN", yaitu 'C' diikuti oleh satu digit, yang merupakan indeks ke dalam siklus properti default ( matplotlib.rcParams['axes.prop_cycle']); pengindeksan terjadi pada waktu pembuatan artis dan default ke hitam jika siklus tidak termasuk warna.

Semua spesifikasi warna string, selain "CN", tidak peka huruf besar-kecil.

Nick T
sumber
Jika ada beberapa cara umum lainnya untuk menghasilkan kapak, beri tahu saya.
Nick T
Sepertinya metode ini menghilang di beberapa titik selama 3 tahun terakhir ... MethodNotFound
Demis
@Demis metode ini ditambahkan dalam beberapa tahun terakhir. Lihat jawaban ImportanceOfBeingEarnest untuk bagaimana melakukannya dalam versi yang lebih lama.
Nick T
47

Salah satu metode adalah dengan secara manual menetapkan default untuk warna latar belakang sumbu dalam skrip Anda (lihat Menyesuaikan matplotlib ):

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

Ini berbeda dengan metode Nick T yang mengubah warna latar belakang untuk axesobjek tertentu . Menyetel ulang default berguna jika Anda membuat banyak plot berbeda dengan gaya yang sama dan tidak ingin terus mengubah axesobjek yang berbeda .

Catatan: Setara untuk

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

dari pertanyaan Anda adalah:

plt.rcParams['figure.facecolor'] = 'black'
BurlyPaulson
sumber
Ini sangat membantu! fyi Saya baru saja meminta dengan benar me-reset kamus matplotlib.rcParams ke default aslinya
uhoh
41

Sesuatu seperti ini? Gunakan axisbgkata kunci untuk 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')

(Memang, bukan plot pencar, dan bukan latar belakang hitam.)

masukkan deskripsi gambar di sini


sumber
3
Saya telah sukses dengan plt.subplot('111', axisbg='black')sebelum merencanakan perintah, menggunakan Windows.
heltonbiker
10
Itu axis_bg axis_bgcolortidak digunakan lagi di matplotlib 2.0.0 dan dihapus di matplotlib 2.2.0
RubenLaguna
13

Jika Anda sudah memiliki axesobjek, seperti dalam jawaban Nick T , Anda juga dapat menggunakan

 ax.patch.set_facecolor('black')
Mathias711
sumber
12

Satu saran dalam jawaban lain adalah menggunakan ax.set_axis_bgcolor("red"). Namun ini sudah usang, dan tidak berfungsi di MatPlotLib> = v2.0.

Ada juga saran untuk digunakan ax.patch.set_facecolor("red")(berfungsi pada kedua MatPlotLib v1.5 & v2.2). Meskipun ini berfungsi dengan baik, solusi yang lebih mudah untuk v2.0 + adalah menggunakan

ax.set_facecolor("red")

ImportanceOfBeingErnest
sumber
FYI, ax.set_axis_bgcolor("black")bekerja pada Python v2.7.14 / MPL v1.5.1, tetapi ax.set_facecolor()tidak. Di suatu tempat antara MPL v1.5.1 dan v2.2.0 fungsi yang tepat bisa diaktifkan.
Demis
1
@Demis Jika Anda perlu solusi yang berfungsi di semua versi, gunakan ax.patch.set_facecolor("red"). Kacang dari matplotlib 2.0 pada cara yang disarankan adalah ax.set_facecolor.
ImportanceOfBeingErnest
4

Yang paling mudah adalah memberi warna saat Anda membuat plot:

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

atau

fig1, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, facecolor=(1, 1, 1))
Flonks
sumber
Ini hanya mengubah warna latar belakang jendela, bukan warna plot sebenarnya
Tom Cupis
1

jawaban yang lebih sederhana:

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