在Seaborn set_style()中访问图例属性

时间:2020-03-04 22:43:27

标签: python matplotlib seaborn

我一直在尝试sns.set_style()来限制冗余设置绘图属性。
我遇到的问题是,我似乎找不到如何访问我要修改的所有属性,例如图例颜色。

请参见下面的样式表和绘图代码:

import seaborn as sns
import numpy as np

dark_plot_no_tick = {
    'axes.facecolor': '#181818',
    'legend.facecolor': "white", # still inheriting from figure
    'axes.edgecolor': '1',
    'axes.grid': False,
    'figure.facecolor': '#181818', # Works inline but not saving
    'xtick.bottom': False, # still visible
    'xtick.top': False,
    'ytick.left': False, # still visible
    'ytick.right': False,
    'axes.spines.left': True,
    'axes.spines.bottom': True,
    'axes.spines.right': False,
    'axes.spines.top': False
}

sns.set_style(rc=dark_plot_no_tick)
sns.set_palette(['#5FB7B2'])

fig, ax = plt.pyplot.subplots()
sns.kdeplot(np.random.normal(10, 10, 10_000), label="test", ax=ax)
fig.savefig("test.png");

唯一的问题是图例facecolor是透明的或继承的,我无法弄清楚如何在传递给set_style()的样式表中进行更改。

这是现在的样子:

Incorrectly formatted legend

这就是我想要的样子:

Correctly formatted legend

编辑:
根据@ImportanceOfBeingErnest的建议,我尝试了以下方法:

import matplotlib 

matplotlib.rcParams["legend.facecolor"] = "white"
matplotlib.rcParams["xtick.bottom"] = False
matplotlib.rcParams["ytick.left"] = False

使用rcParams修改legend.facecolor是有效的,而不能修改xtick.bottomytick.left

也就是说,我仍然更愿意使用sns.set_style()而不是matplotlib.rcParams来修改脸色。

此外,我意识到消除刻度线不是原始问题的一部分,但我将其包含在此处,因为我相信两者可能是由于相同的根本原因而引起问题的。

0 个答案:

没有答案