วิธีการเปลี่ยนสีพื้นหลังของพล็อต


226

ฉันกำลังทำพล็อตกระจายใน matplotlib และต้องเปลี่ยนพื้นหลังของพล็อตจริงให้เป็นสีดำ ฉันรู้วิธีเปลี่ยนสีใบหน้าของเนื้อเรื่องโดยใช้:

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

ป้อนคำอธิบายรูปภาพที่นี่

ปัญหาของฉันคือการเปลี่ยนสีของพื้นที่รอบพล็อต ฉันจะเปลี่ยนสีพื้นหลังจริงของพล็อตได้อย่างไร


9
เพียงแค่ FYI นอกเหนือจากสิ่งที่ @Evert กล่าวไว้คุณสามารถใช้ax.patch.set_facecolor('black')( axอินสแตนซ์ของแกน) อยู่ที่ไหน fig.patchเป็นพื้นหลังของรูปและax.patchเป็นพื้นหลังของแกน
Joe Kington

คำตอบ:


230

ใช้set_facecolor(color)วิธีการของaxesวัตถุที่คุณได้สร้างวิธีใดวิธีหนึ่งต่อไปนี้:

  • คุณสร้างรูปและแกน / es พร้อมกัน

    fig, ax = plt.subplots(nrows=1, ncols=1)
  • คุณสร้างรูปแล้วตามด้วยแกน / es ในภายหลัง

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
    
  • คุณใช้ stateful API (ถ้าคุณทำอะไรมากกว่าสองสามบรรทัดและโดยเฉพาะอย่างยิ่งถ้าคุณมีหลายแปลงวิธีการเชิงวัตถุด้านบนทำให้ชีวิตง่ายขึ้นเพราะคุณสามารถอ้างถึงตัวเลขเฉพาะพล็อตในแกนบางอย่างและปรับแต่ง ทั้ง)

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

จากนั้นคุณสามารถใช้set_facecolor:

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

พล็อตตัวอย่างที่มีพื้นหลังสีชมพูบนแกน

เพื่อทบทวนสิ่งที่สีสามารถเป็น:

matplotlib.colors

Matplotlib รู้จักรูปแบบต่อไปนี้เพื่อระบุสี:

  • tuple RGB หรือ RGBA ของค่าลอยใน[0, 1](เช่น(0.1, 0.2, 0.5)หรือ(0.1, 0.2, 0.5, 0.3));
  • สตริง RGB หรือ RGBA ฐานสิบหก (เช่น, '#0F0F0F'หรือ'#0F0F0F0F');
  • การแสดงสตริงของค่า[0, 1]ทศนิยมรวมอยู่ในระดับสีเทา (เช่น, '0.5');
  • หนึ่งใน{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • ชื่อสี X11 / CSS4;
  • ชื่อจากแบบสำรวจสี xkcd ; นำหน้าด้วย'xkcd:'(เช่น, 'xkcd:sky blue');
  • หนึ่งใน{'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}นั้นคือ Tableau Colours จากพาเลตต์หมวดหมู่ 'T10' (ซึ่งเป็นวงจรสีเริ่มต้น);
  • ข้อมูลจำเพาะสี“ CN” คือ 'C' ตามด้วยตัวเลขหลักเดียวซึ่งเป็นดัชนีในวัฏจักรคุณสมบัติเริ่มต้น ( matplotlib.rcParams['axes.prop_cycle']); การจัดทำดัชนีเกิดขึ้นในเวลาที่สร้างศิลปินและค่าเริ่มต้นเป็นสีดำหากรอบไม่รวมสี

ข้อมูลจำเพาะสตริงทั้งหมดของสีนอกเหนือจาก“ CN” จะไม่ตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก


หากมีวิธีทั่วไปอื่น ๆ ในการสร้างแกนให้ฉันรู้
Nick T

ดูเหมือนว่าวิธีนี้จะหายไปในบางจุดในช่วง 3 ปีที่ผ่านมา ... MethodNotFound
Demis

@Demis วิธีนี้ถูกเพิ่มเข้ามาในปีที่ผ่านมา ดูคำตอบของ ImportanceOfBeingEarnestสำหรับวิธีการทำในเวอร์ชันที่เก่ากว่า
Nick T

47

วิธีหนึ่งคือการตั้งค่าเริ่มต้นสำหรับสีพื้นหลังของแกนภายในสคริปต์ของคุณ (ดูที่การปรับแต่ง matplotlib ):

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

ตรงกันข้ามกับวิธีของ Nick T ซึ่งเปลี่ยนสีพื้นหลังสำหรับaxesวัตถุเฉพาะ การรีเซ็ตค่าเริ่มต้นจะมีประโยชน์หากคุณกำลังแปลงหลาย ๆ แบบด้วยสไตล์ที่คล้ายกันและไม่ต้องการเปลี่ยนaxesวัตถุที่แตกต่างกัน

หมายเหตุ: เทียบเท่าสำหรับ

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

จากคำถามของคุณคือ:

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

สิ่งนี้มีประโยชน์! fyi ฉันเพิ่งถามให้รีเซ็ตพจนานุกรม matplotlib.rcParams
uhoh

41

อะไรแบบนี้? ใช้axisbgคำสำคัญเพื่อ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')

(ได้รับไม่ใช่พล็อตกระจายและไม่ใช่พื้นหลังสีดำ)

ป้อนคำอธิบายรูปภาพที่นี่


3
ฉันประสบความสำเร็จplt.subplot('111', axisbg='black')ก่อนหน้าคำสั่งการวางแผนโดยใช้ Windows
heltonbiker

10
axis_bg axis_bgcolorถูกคัดค้านใน matplotlib 2.0.0 และลบออกใน matplotlib 2.2.0
RubenLaguna


12

หนึ่งคำแนะนำในคำตอบอื่น ๆ ax.set_axis_bgcolor("red")คือการใช้งาน อย่างไรก็ตามสิ่งนี้ถูกคัดค้านและไม่ทำงานบน MatPlotLib> = v2.0

นอกจากนี้ยังมีข้อเสนอแนะให้ใช้ax.patch.set_facecolor("red")(ใช้ได้ทั้ง MatPlotLib v1.5 & v2.2) ในขณะที่ใช้งานได้ดีโซลูชันที่ง่ายยิ่งขึ้นสำหรับ v2.0 + คือการใช้

ax.set_facecolor("red")


FYI ใช้ax.set_axis_bgcolor("black")งานได้กับ Python v2.7.14 / MPL v1.5.1 แต่ใช้ax.set_facecolor()ไม่ได้ อยู่ระหว่าง MPL v1.5.1 และ v2.2.0 ฟังก์ชั่นที่เหมาะสมได้เปลี่ยน
Demis

1
@Demis ax.patch.set_facecolor("red")หากคุณจำเป็นต้องแก้ปัญหาที่ทำงานในทุกรุ่นที่ใช้ อ่อนนุชจาก matplotlib 2.0 ax.set_facecolorในวิธีที่แนะนำคือ
ImportanceOfBeingErnest

4

สิ่งที่ง่ายที่สุดน่าจะให้สีเมื่อคุณสร้างพล็อต:

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

หรือ

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

สิ่งนี้จะเปลี่ยนสีพื้นหลังของหน้าต่างไม่ใช่สีพล็อตจริง
Tom Cupis

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.