首页 > 解决方案 > 如何使用 rcParams 格式化子图背景?

问题描述

更新:虽然这里 有类似的讨论,但鉴于需要用于更改子图背景颜色的令人困惑/不直观的属性,我仍然保留我的问题。希望我用来描述这个问题的语言将进一步帮助一些困惑的编码人员。

背景: 我需要绘制一系列图表,各种格式和数据。当使用 Matplotlib 的标准样式时,这是我得到的一个示例。请注意,图形和子图的背景都是白色的。

全白背景

使用 rcParams,我可以快速更改所有图表的设置,从而避免我必须单独更改每个图表的格式。它还帮助我在图表上保持一定的标准,使它们看起来很专业。

问题: 由于我所有的电子表格(请参阅此处我编写的将 Excel 电子表格转换为暗格式的代码)、浏览器等都是暗格式,我希望我的 Python 图表也采用暗格式。考虑到代码有多小,使用 rcParams 是最好的方法:

import matplotlib.pyplot as plt

    rgb_color = [51,51,51] #color in RGB format
    rgb_decimal_1 = [x / 255.0 for x in rgb_color] #RGB color in "decimals"

    #set colors for all charts parameters
    params = {'text.color':'white', 'xtick.color':'white', 'ytick.color':'white', 'figure.facecolor':rgb_decimal_1} 
    plt.rcParams.update(params)

使用这个简单的代码,我改变了几乎所有我需要的颜色来使我的图表变暗。但是,有一部分我想不出办法:SUBPLOTs 背景。查看上面的代码时相同图表的外观。请注意,虽然图形背景现在是深色的(字母是白色的,等等),但 SUBPLOT 背景仍然是白色的:

图暗背景

请注意,我知道如何使子图变暗。如果我添加下面的简单代码,在绘制每个 subplot 时,我可以使 subplot 背景变暗。查看代码后的输出:

rgb_color = [41,41,41] #color in RGB format
rgb_decimal = [x / 255.0 for x in rgb_color] #RGB color in decimal format
chart_p.set_facecolor((rgb_decimal)) #set color background of each chart subplot

所有黑暗的背景

然而,必须在每个子图上包含上面的代码正是我想要避免的。有关如何使用 rcParams 的文档非常好(请参阅此处)。但我找不到 SUBPLOTs 背景的设置。我期待“图形子图参数”类似于figure.subplot.facecolor但它不存在。

我错过了一些明显的东西吗?我知道有一种方法可以设置 SUBPLOTs 背景颜色,因为如果我使用样式“深色背景”[plt.style.use('dark_background')],图表 SUBPLOT 背景会变为黑色。关闭但不是我想要的颜色。

标签: pythonmatplotlib

解决方案


看来我错过了一些明显的东西!感谢@busybear 在两分钟内回答我的问题!我应该使用的属性是“axes.facecolor”(可悲的是,我查看了所有带有“facecolor”的属性,并确定不是“axes.facecolor”......)。下面是现在使我的所有图表子图都具有深色背景的新代码:

import matplotlib.pyplot as plt

    rgb_color = [51,51,51] #color in RGB format
    rgb_decimal_1 = [x / 255.0 for x in rgb_color] #RGB color in "decimals"

    rgb_color = [41,41,41] #color in RGB format
    rgb_decimal_2 = [x / 255.0 for x in rgb_color] #RGB color in decimal format

    #set colors for all charts parameters
    params = {'text.color':'white', 'xtick.color':'white', 'ytick.color':'white', 'figure.facecolor':rgb_decimal_1, 'axes.facecolor':rgb_decimal_2} 
    plt.rcParams.update(params)

推荐阅读