Seaborn 主题风格函数
对于 Seaborn 来说,它为我们提供了 5 种不同的主题风格,这样也是为了让图表的用户体验更好。在 Seaborn 中,我们可以使用 set_theme() 函数来设置一种主题风格。
语法:
sns.set_theme(style)说明:
参数 style 是主题风格的名字,它有 5 种取值,如下表所示。
| 取值 | 说明 |
|---|---|
| ticks | 带刻线的白色背景 |
| white | 白色背景 |
| dark | 灰色背景 |
| whitegrid | 白色网格 |
| darkgrid(默认值) | 灰色网格 |
除了 set_theme() 函数之外,还有一个 set_style() 函数。下面 2 种方式是等价的。
# 方式1
sns.set_theme(style='ticks')
# 方式2
sns.set_style(style='ticks')注意: 在 Seaborn 0.11+ 版本中,仅导入库而不使用 set_theme() 时,则 Seaborn 会使用 Matplotlib 默认外观(类似 "ticks")。但如果调用 sns.set_theme() 而不传参,则 Seaborn 会默认使用 "darkgrid" 主题。
Seaborn 主题风格示例
接下来,我们通过一个简单例子来介绍一下 Seaborn 是如何设置主题风格的。
示例:Seaborn 设置主题风格
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 设置主题,并解决乱码
sns.set_theme(style="darkgrid", rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})
# 数据
data = [
['2025-01-01', 16],
['2025-01-02', 15],
['2025-01-03', 16],
['2025-01-04', 18],
['2025-01-05', 17]
]
df = pd.DataFrame(data, columns=['日期', '气温'])
df.set_index('日期', inplace=True)
# 绘图
sns.lineplot(data=df)
# 显示
plt.show()运行之后,效果如下图所示。

分析:
需要特别注意一点,如果图表包含中文,我们需要使用 set_theme() 设置 “主题” 的同时,还要给它设置一个 “中文字体”,否则就会导致显示乱码。
# 设置主题,并解决乱码
sns.set_theme(style="darkgrid", rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})其中,'font.sans-serif': 'SimHei' 表示设置字体为 “SimHei(宋体)”,这样有中文就不会显示乱码。而 'axes.unicode_minus': False 用于解决负号显示为方块(乱码)的问题,小伙伴们将其看成是固定写法即可。
接下来我们尝试修改 set_theme() 的主题参数值,然后看看不同取值的效果又是怎样的。当取值为 “white” 时,效果如下图所示。需要注意的是,当主题为 “white” 时,坐标轴是不带刻度标识的。而当主题为 “ticks” 时,坐标轴是带刻度标识的。

当取值为 “dark” 时,使用的是暗色主题,效果如下图所示。

当取值为 “whitegrid” 时,使用的是白色主题并且是带网格的,效果如下图所示。

当取值为 “darkgrid” 时,使用的是暗色主题并且是带网格的,效果如下图所示。

也就是说,下面 2 种方式是等价的。在后面章节中,我们优先使用方式 2 这种简写语法。
# 方式 1
sns.set_theme(style="darkgrid", rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})
# 方式 2
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})在实际开发中,如果是使用 Seaborn 来绘图,我们更多是推荐使用 “darkgrid” 这种主题风格。因为它相对于其他风格来说更具有 Seaborn 特色,并且用户体验也更好。
