如何改变情节背景颜色?

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

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

enter image description here

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

589366 次浏览

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

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

enter image description here

使用set_facecolor(color)方法,你已经创建了以下方式之一:

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

    fig, ax = plt.subplots(nrows=1, ncols=1)
    
  • You created a figure, then axis/es later

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1) # nrows, ncols, index
    
  • You used the stateful API (if you're doing anything more than a few lines, and especially if you have multiple plots, the object-oriented methods above make life easier because you can refer to specific figures, plot on certain axes, and customize either)

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

Then you can use set_facecolor:

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

example plot with pink background on the axes

复习一下什么是颜色:

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色测中的一个名称;前缀为'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”外,所有颜色的字符串规格都不区分大小写。

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

 ax.patch.set_facecolor('black')

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

其他答案中的一个建议是使用ax.set_axis_bgcolor("red")。然而,这是不赞成的,并且不工作在MatPlotLib >= v2.0。

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

ax.set_facecolor("red")

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

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

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

简单的回答是:

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

除了NickT的答案,你还可以通过设置为“;none”来删除背景帧。如这里所解释的:https://stackoverflow.com/a/67126649/8669161

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

我认为这可能对一些人有用:

如果你想改变背景的颜色,即围绕的图形,你可以使用这个:

fig.patch.set_facecolor('white')

所以不要这样:

透明背景图像

你会得到这个:

enter image description here

显然你可以设置任何你想要的颜色。

注:如果你不小心看不出两个图之间有任何区别,试着用暗模式查看StackOverflow。