如何更改情节背景颜色?


226

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

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

在此处输入图片说明

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


9
仅供参考,除了@Evert所说的以外,您也可以使用ax.patch.set_facecolor('black')ax轴实例在哪里)。 fig.patch是图形背景,ax.patch是轴背景。
乔·肯顿

Answers:


230

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

  • 您一起创建了图形和轴

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

    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可识别以下格式以指定颜色:

  • 浮动值的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'}是“ T10”分类调色板中的Tableau颜色(这是默认颜色周期);
  • “ CN”颜色规范,即“ C”后跟一位数字,这是默认属性周期(matplotlib.rcParams['axes.prop_cycle'])的索引;该索引在艺术家创建时发生,如果循环不包含颜色,则默认为黑色。

除“ CN”外,所有颜色的字符串规格均不区分大小写。


如果还有其他常见的生成轴的方法,请告诉我。
尼克T

在过去的3年中,这种方法似乎消失了……MethodNotFound
Demis

@Demis这种方法是近年来添加的。请参阅ImportanceOfBeingEarnest的答案以获取在旧版本中的操作方法。
尼克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'

这很有帮助!仅供参考,我刚刚要求将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")


仅供参考,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

1

比较简单的答案:

ax = plt.axes()
ax.set_facecolor('silver')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.