322

我正在 matplotlib 中制作散点图,需要将实际绘图的背景更改为黑色。我知道如何使用以下方法更改绘图的面部颜色:

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

在此处输入图像描述

我的问题是这会改变情节周围空间的颜色。如何更改绘图的实际背景颜色?

4

8 回答 8

314

使用您已通过以下方式之一创建set_facecolor(color)axesobject的方法:

  • 您一起创建了一个图形和轴/es

    fig, ax = plt.subplots(nrows=1, ncols=1)
    
  • 您创建了一个图形,然后是轴/es

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
    
  • 你使用了有状态的 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 识别以下格式来指定颜色:

  • [0, 1](例如,(0.1, 0.2, 0.5)或)中浮点值的 RGB 或 RGBA 元组(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'}是来自“T10”分类调色板的 Tableau 颜色(这是默认颜色循环);
  • “CN”颜色规范,即“C”后跟一个数字,这是默认属性循环 ( matplotlib.rcParams['axes.prop_cycle']) 的索引;索引在艺术家创建时发生,如果循环不包括颜色,则默认为黑色。

除“CN”之外的所有颜色字符串规范都不区分大小写。

于 2014-05-14T04:05:02.657 回答
77

一种方法是在脚本中手动设置轴背景颜色的默认值(请参阅自定义 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'
于 2016-11-02T01:13:56.243 回答
42

像这样的东西?使用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')

(当然,不是散点图,也不是黑色背景。)

在此处输入图像描述

于 2012-12-30T07:26:32.003 回答
26

更简单的答案:

ax = plt.axes()
ax.set_facecolor('silver')
于 2020-05-21T23:07:23.740 回答
21

如果您已经有axes对象,就像在Nick T的答案中一样,您也可以使用

 ax.patch.set_facecolor('black')
于 2014-05-28T09:33:57.530 回答
17

One suggestion in other answers is to use ax.set_axis_bgcolor("red"). This however is deprecated, and doesn't work on MatPlotLib >= v2.0.

There is also the suggestion to use ax.patch.set_facecolor("red") (works on both MatPlotLib v1.5 & v2.2). While this works fine, an even easier solution for v2.0+ is to use

ax.set_facecolor("red")

于 2017-04-13T11:30:51.297 回答
17

最简单的事情可能是在创建绘图时提供颜色:

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

或者

fig1, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, facecolor=(1, 1, 1))
于 2019-05-03T19:03:37.317 回答
1

除了 NickT 的答案之外,您还可以通过将其设置为“无”来删除背景框架,如下所述:https ://stackoverflow.com/a/67126649/8669161

import matplotlib.pyplot as plt
plt.rcParams['axes.facecolor'] = 'none'
于 2021-04-16T14:06:28.233 回答