我一直在尝试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()的样式表中进行更改。
这是现在的样子:
这就是我想要的样子:
编辑:
根据@ImportanceOfBeingErnest的建议,我尝试了以下方法:
import matplotlib
matplotlib.rcParams["legend.facecolor"] = "white"
matplotlib.rcParams["xtick.bottom"] = False
matplotlib.rcParams["ytick.left"] = False
使用rcParams
修改legend.facecolor
是有效的,而不能修改xtick.bottom
和ytick.left
。
也就是说,我仍然更愿意使用sns.set_style()
而不是matplotlib.rcParams
来修改脸色。
此外,我意识到消除刻度线不是原始问题的一部分,但我将其包含在此处,因为我相信两者可能是由于相同的根本原因而引起问题的。