Çizim arka plan rengini nasıl değiştirebilirim?


226

Matplotlib'de bir dağılım grafiği yapıyorum ve gerçek arsanın arka planını siyah olarak değiştirmeniz gerekiyor. Nasıl kullanarak arsanın yüz rengini değiştirmek için biliyorum:

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

resim açıklamasını buraya girin

Benim sorunum, bu arsa çevresindeki boşluğun rengini değiştirir. Çizimin gerçek arka plan rengini nasıl değiştirebilirim?


9
Sadece FYI, @Evert'in söylediklerine ek olarak, sadece kullanabilirsiniz ax.patch.set_facecolor('black')( axeksen örneği nerede ). fig.patchŞekil arka planı ve ax.patcheksen arka planıdır.
Joe Kington

Yanıtlar:


230

Aşağıdaki yöntemlerden birini oluşturduğunuz nesnenin set_facecolor(color)yönteminiaxes kullanın :

  • Birlikte bir şekil ve eksen / es oluşturdunuz

    fig, ax = plt.subplots(nrows=1, ncols=1)
  • Bir şekil oluşturdunuz, daha sonra eksen / es

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
  • Durum bilgisi olan API'yı kullandınız (birkaç satırdan daha fazla bir şey yapıyorsanız ve özellikle birden fazla çiziminiz varsa, yukarıdaki nesneye yönelik yöntemler hayatı kolaylaştırır, çünkü belirli şekillere başvurabilir, belirli eksenlerde çizim yapabilir ve özelleştirebilirsiniz olarak)

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

Sonra şunları kullanabilirsiniz set_facecolor:

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

eksen üzerinde pembe bir arka plan ile örnek arsa

Hangi renklerin olabileceği için bir tazeleme olarak:

matplotlib.colors

Matplotlib bir renk belirtmek için aşağıdaki biçimleri tanır:

  • [0, 1](ör. (0.1, 0.2, 0.5)veya (0.1, 0.2, 0.5, 0.3)) içindeki bir RGB veya RGBA kayan nokta değeri ;
  • bir onaltılık RGB veya RGBA dizesi (örneğin '#0F0F0F'veya '#0F0F0F0F');
  • [0, 1]gri seviyesi için kapsayıcı bir şamandıra değerinin dize ile temsil edilmesi (örn. '0.5');
  • biri {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • bir X11 / CSS4 renk adı;
  • xkcd renk anketinden bir isim ; ön ekiyle 'xkcd:'(ör. 'xkcd:sky blue');
  • bunlardan biri {'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}'T10' kategorik paletinden (varsayılan renk döngüsü olan) Tableau Renkleri;
  • bir "CN" renk spesifikasyonu, yani 'C' ve ardından tek basamak, varsayılan özellik döngüsünün ( matplotlib.rcParams['axes.prop_cycle']) bir indeksi ; indeksleme sanatçı oluşturma zamanında gerçekleşir ve döngü renk içermiyorsa varsayılan olarak siyahtır.

“CN” dışındaki tüm renk dizesi özellikleri büyük / küçük harfe duyarlı değildir.


Eksen üretmenin başka bir yaygın yolu varsa, bana bildirin.
Nick T

Görünüşe göre bu yöntem son 3 yılda bir noktada ortadan kayboldu ... MethodNotFound
Demis

@ Bu yöntem son yıllarda eklendi. Eski sürümlerde nasıl yapılacağına ilişkin ImportanceOfBeingEarnest yanıtına bakın .
Nick T

47

Yöntemlerden biri, komut dosyanızdaki eksen arka plan rengi için varsayılanı manuel olarak ayarlamaktır (bkz. Matplotlib'i özelleştirme ):

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

Bu, Nick T'nin belirli bir axesnesnenin arka plan rengini değiştiren yönteminin aksine . Benzer stillere sahip birden fazla farklı çizim yapıyorsanız ve farklı axesnesneleri değiştirmeye devam etmek istemiyorsanız, varsayılanları sıfırlamak yararlıdır .

Not: eşdeğeri

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

sorunuzdan:

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

Bu yardımcı olur!
fyi

41

Böyle bir şey mi? axisbgAnahtar kelimeyi şu amaçlarla kullanın 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')

(Verilen bir dağılım değil, siyah bir arka plan değil.)

resim açıklamasını buraya girin


3
plt.subplot('111', axisbg='black')Windows kullanarak çizim komutlarından önce başarılı oldum .
14:59, heltonbiker

10
axis_bg axis_bgcolorMatplotlib 2.2.0 yılında matplotlib 2.0.0 kullanımdan kaldırılmış ve kaldırıldı
RubenLaguna


12

Diğer cevaplarda bir öneri kullanmaktır ax.set_axis_bgcolor("red"). Ancak bu kullanımdan kaldırılmıştır ve MatPlotLib> = v2.0 üzerinde çalışmaz.

Kullanılacak öneri de vardır ax.patch.set_facecolor("red")(hem MatPlotLib v1.5 ve v2.2 üzerinde çalışır). Bu iyi çalışıyor olsa da, v2.0 + için daha kolay bir çözüm kullanmaktır

ax.set_facecolor("red")


FYI, ax.set_axis_bgcolor("black")Python v2.7.14 / MPL v1.5.1 üzerinde çalışır, ancak ax.set_facecolor()çalışmaz. MPL v1.5.1 ve v2.2.0 arasında bir yerde uygun fonksiyon değiştirildi.
Demis

1
@Demis Tüm sürümlerde çalışan bir çözüme ihtiyacınız varsa kullanın ax.patch.set_facecolor("red"). Matplotlib 2.0'dan gelen somun tavsiye edilir ax.set_facecolor.
ImportanceOfBeingErnest

4

En kolay şey, grafiği oluştururken rengi sağlamaktır:

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

veya

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

Bu sadece pencere arkaplan rengini değiştirir, gerçek çizim rengini değiştirmez
Tom Cupis

1

daha basit cevap:

ax = plt.axes()
ax.set_facecolor('silver')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.