Làm thế nào để thay đổi màu nền cốt truyện?


226

Tôi đang thực hiện một âm mưu phân tán trong matplotlib và cần thay đổi nền của cốt truyện thực tế thành màu đen. Tôi biết cách thay đổi màu sắc khuôn mặt của cốt truyện bằng cách sử dụng:

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

nhập mô tả hình ảnh ở đây

Vấn đề của tôi là điều này thay đổi màu sắc của không gian xung quanh cốt truyện. Làm cách nào để thay đổi màu nền thực tế của cốt truyện?


9
Chỉ cần FYI, ngoài những gì @Evert nói, bạn chỉ có thể sử dụng ax.patch.set_facecolor('black')( axví dụ về trục). fig.patchlà nền hình và ax.patchlà nền trục.
Joe Kington

Câu trả lời:


230

Sử dụng set_facecolor(color)phương thức của axesđối tượng mà bạn đã tạo một trong các cách sau:

  • Bạn đã tạo một hình và trục / es với nhau

    fig, ax = plt.subplots(nrows=1, ncols=1)
  • Bạn đã tạo một hình, sau đó trục / es sau

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
    
  • Bạn đã sử dụng API trạng thái (nếu bạn đang làm bất cứ điều gì nhiều hơn một vài dòng và đặc biệt là nếu bạn có nhiều ô, các phương pháp hướng đối tượng ở trên giúp cuộc sống dễ dàng hơn vì bạn có thể tham khảo các số liệu cụ thể, vẽ đồ thị trên các trục nhất định và tùy chỉnh hoặc)

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

Sau đó, bạn có thể sử dụng set_facecolor:

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

cốt truyện ví dụ với nền màu hồng trên các trục

Như một bồi dưỡng cho những gì màu sắc có thể được:

matplotlib.colors

Matplotlib nhận ra các định dạng sau để chỉ định màu:

  • một tuple RGB hoặc RGBA của các giá trị float trong [0, 1](ví dụ: (0.1, 0.2, 0.5)hoặc (0.1, 0.2, 0.5, 0.3));
  • chuỗi hex RGB hoặc RGBA (ví dụ: '#0F0F0F'hoặc '#0F0F0F0F');
  • biểu diễn chuỗi của giá trị float [0, 1]bao gồm mức xám (ví dụ '0.5':);
  • một trong {'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'};
  • tên màu X11 / CSS4;
  • một tên từ khảo sát màu xkcd ; tiền tố với 'xkcd:'(ví dụ, 'xkcd:sky blue');
  • một trong số {'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}đó là Màu Tableau từ bảng phân loại 'T10' (là chu kỳ màu mặc định);
  • một thông số màu của CN CN, tức là 'C', theo sau là một chữ số, là một chỉ mục trong chu kỳ thuộc tính mặc định ( matplotlib.rcParams['axes.prop_cycle']); việc lập chỉ mục xảy ra tại thời điểm tạo nghệ sĩ và mặc định thành màu đen nếu chu trình không bao gồm màu.

Tất cả các thông số kỹ thuật của chuỗi màu, không phải là CN CN, không phân biệt chữ hoa chữ thường.


Nếu có một số cách phổ biến khác để tạo ra các trục, hãy cho tôi biết.
Nick T

Có vẻ như phương pháp này đã biến mất tại một số điểm trong 3 năm qua ... MethodNotFound
Demis

@Demis phương pháp này đã được thêm vào trong những năm gần đây. Xem câu trả lời của ImportanceOfByingEarnest để biết cách thực hiện trong các phiên bản cũ hơn.
Nick T

47

Một phương pháp là đặt thủ công mặc định cho màu nền trục trong tập lệnh của bạn (xem Tùy chỉnh matplotlib ):

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

Điều này trái ngược với phương pháp của Nick T, thay đổi màu nền cho một axesđối tượng cụ thể . Đặt lại mặc định là hữu ích nếu bạn tạo nhiều ô khác nhau với các kiểu tương tự và không muốn tiếp tục thay đổi các axesđối tượng khác nhau .

Lưu ý: Tương đương với

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

từ câu hỏi của bạn là:

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


41

Một cái gì đó như thế này? Sử dụng axisbgtừ khóa để 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')

(Được cấp, không phải là một âm mưu phân tán, và không phải là một nền đen.)

nhập mô tả hình ảnh ở đây


3
Tôi đã thành công với plt.subplot('111', axisbg='black')trước các lệnh vẽ, sử dụng Windows.
heltonbiker

10
Chúng axis_bg axis_bgcolorkhông được dùng trong matplotlib 2.0.0 và bị xóa trong matplotlib 2.2.0
RubenLaguna


12

Một gợi ý trong các câu trả lời khác là sử dụng ax.set_axis_bgcolor("red"). Tuy nhiên, điều này không được chấp nhận và không hoạt động trên MatPlotLib> = v2.0.

Ngoài ra còn có gợi ý để sử dụng ax.patch.set_facecolor("red")(hoạt động trên cả MatPlotLib v1.5 & v2.2). Trong khi điều này hoạt động tốt, một giải pháp thậm chí dễ dàng hơn cho v2.0 + là sử dụng

ax.set_facecolor("red")


FYI, ax.set_axis_bgcolor("black")hoạt động trên Python v2.7.14 / MPL v1.5.1, nhưng ax.set_facecolor()không. Ở đâu đó giữa MPL v1.5.1 và v2.2.0, chức năng thích hợp đã được chuyển đổi.
Demis

1
@Demis Nếu bạn cần một giải pháp hoạt động trong tất cả các phiên bản, hãy sử dụng ax.patch.set_facecolor("red"). Nut từ matplotlib 2.0 theo cách được khuyến nghị là ax.set_facecolor.
ImportanceOfByingErnest

4

Điều dễ nhất có lẽ là cung cấp màu sắc khi bạn tạo cốt truyện:

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

hoặc là

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

Điều này chỉ thay đổi màu nền cửa sổ, không phải màu cốt truyện thực tế
Tom Cupis

1

câu trả lời đơn giản hơn:

ax = plt.axes()
ax.set_facecolor('silver')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.