【问题标题】:How to change plot background color?如何更改绘图背景颜色?
【发布时间】:2012-12-14 20:25:12
【问题描述】:

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

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

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

【问题讨论】:

  • 仅供参考,除了@Evert 所说的之外,您还可以使用ax.patch.set_facecolor('black')(其中ax 是轴实例)。 fig.patch 是图形背景,ax.patch 是坐标轴背景。

标签: python matplotlib


【解决方案1】:

使用axes 对象的set_facecolor(color) 方法,您已通过以下方式之一创建了该方法:

  • 你一起创建了一个图形和轴

    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] 中浮点值的 RGB 或 RGBA 元组(例如,(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 color survey 的名称;以'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”之外的所有颜色字符串规格都不区分大小写。

【讨论】:

  • 如果有其他常用的生成坐标轴的方法,请告诉我。
  • 看起来这种方法在过去 3 年的某个时候消失了...MethodNotFound
  • @Demis 这个方法是近年加入的。请参阅ImportanceOfBeingEarnest's answer 了解如何在旧版本中执行此操作。
【解决方案2】:

一种方法是在脚本中手动设置轴背景颜色的默认值(请参阅Customizing 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'

【讨论】:

【解决方案3】:

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

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

【讨论】:

  • 我在使用 Windows 的绘图命令之前使用plt.subplot('111', axisbg='black') 取得了成功。
  • axis_bg axis_bgcolor 在 matplotlib 2.0.0 中被弃用并在 matplotlib 2.2.0 中被删除
【解决方案4】:

更简单的答案:

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

【讨论】:

  • 这是最好的答案。
【解决方案5】:

如果你已经有axes对象,就像在Nick T's answer中一样,你也可以使用

 ax.patch.set_facecolor('black')

【讨论】:

    【解决方案6】:

    其他答案中的一个建议是使用ax.set_axis_bgcolor("red")。然而,这已被弃用,并且不适用于 MatPlotLib >= v2.0。

    还有使用 ax.patch.set_facecolor("red") 的建议(适用于 MatPlotLib v1.5 和 v2.2)。虽然这很好用,但对于 v2.0+,一个更简单的解决方案是使用

    ax.set_facecolor("red")

    【讨论】:

    • 仅供参考,ax.set_axis_bgcolor("black") 适用于 Python v2.7.14/MPL v1.5.1,但 ax.set_facecolor() 不适用。在 MPL v1.5.1 和 v2.2.0 之间的某个地方切换了正确的功能。
    • @Demis 如果您需要适用于所有版本的解决方案,请使用ax.patch.set_facecolor("red")。 matplotlib 2.0 中推荐的方式是ax.set_facecolor
    【解决方案7】:

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

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

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

    【讨论】:

    • 这只会改变窗口背景颜色,而不是实际的绘图颜色
    【解决方案8】:

    除了 NickT 的回答,你还可以通过设置为“none”来删除背景框,如下所述:https://stackoverflow.com/a/67126649/8669161

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

    【讨论】: