Seaborn 数据可视化入门与进阶
Seaborn 数据可视化入门与进阶
用 Python 快速绘制专业统计图表
一、Seaborn 简介
Seaborn 是基于 Matplotlib 的 Python 数据可视化库,专注于统计图表的绘制。相比 Matplotlib,Seaborn 提供:
-
更美观的默认样式:无需复杂配置即可获得专业外观。
-
更简洁的 API:用更少的代码实现复杂的统计图形。
-
内置统计功能:自动计算置信区间、核密度估计等。
-
与 Pandas 无缝集成:完美支持 DataFrame 数据结构。
安装命令:
pip install seaborn
二、主题与样式设置
1. 设置全局主题
通过 sns.set_theme() 可以一键定义全局视觉风格。
import seaborn as sns
import matplotlib.pyplot as plt
# 解决中文显示问题(必备)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 基础设置
sns.set_theme(style="whitegrid", font="SimHei") # 也可以在主题中指定字体
style 参数可选值:
| 值 | 特点 | 适用场景 |
|---|---|---|
white |
纯白背景 | 正式报告、论文 |
whitegrid |
白底带网格 | 数据对比,易于观察数值 |
dark |
深色背景 | 演示文稿 |
darkgrid |
深底带网格 | 数据密集型图表 |
ticks |
带刻度线 | 需要精确读数的场景 |
2. 移除边框
使用 despine() 可以让图表看起来更现代、更简洁。
# 默认移除顶部和右侧边框
sns.despine()
# 边框偏移,增加视觉呼吸感
sns.despine(offset=10, trim=True)
三、调色板系统
Seaborn 的颜色处理非常强大,分为三种类型:
1. 分类调色板(无序类别)
# husl 是感知均匀的循环色彩系统
sns.color_palette("husl", 8)
sns.color_palette("Set2") # 柔和分类
sns.color_palette("tab10") # 经典十色
2. 顺序调色板(数值大小)
sns.color_palette("Blues", 6) # 浅蓝色系(由浅入深)
sns.color_palette("viridis", 6) # 科学可视化首选(感知一致)
sns.color_palette("rocket", 6) # 热烈橙红
3. 设置全局颜色
sns.set_palette("muted")
四、常用图表类型
1. 分布图 (Distribution)
# 直方图 + 核密度估计
sns.histplot(data=df, x="value", kde=True)
# 箱线图(展示四分位数和异常值)
sns.boxplot(data=df, x="category", y="value")
# 小提琴图(展示分布密度)
sns.violinplot(data=df, x="category", y="value")
2. 关系图 (Relational)
# 散点图
sns.scatterplot(data=df, x="x", y="y", hue="category")
# 线图(自动带置信区间阴影)
sns.lineplot(data=df, x="time", y="value", hue="group")
3. 分类图 (Categorical)
# 条形图
sns.barplot(data=df, x="category", y="value")
# 计数图(自动统计频数)
sns.countplot(data=df, x="category")
五、实战示例
示例 1:专业水平条形图
针对最新版 API 优化,添加了 hue 处理以避免警告。
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 准备数据
df = pd.DataFrame({
"产品": ["产品A", "产品B", "产品C", "产品D", "产品E"],
"销量": [120, 98, 86, 72, 65]
})
# 设置环境
plt.rcParams['font.sans-serif'] = ['SimHei']
sns.set_theme(style="white")
fig, ax = plt.subplots(figsize=(10, 6))
# 绘图:指定 hue 以适配 API,legend=False 隐藏多余图例
colors = sns.color_palette("Blues_r", len(df))
sns.barplot(data=df, x="销量", y="产品", hue="产品", palette=colors, legend=False, ax=ax)
# 美化
sns.despine(top=True, right=True)
ax.set_xlabel("销量(万件)", fontsize=12)
ax.set_title("年度产品销量排行", fontweight="bold", fontsize=16)
plt.tight_layout()
plt.show()
示例 2:多组对比图
import pandas as pd
df_group = pd.DataFrame({
"月份": ["1月", "2月", "3月"] * 2,
"销量": [100, 120, 150, 80, 95, 110],
"地区": ["北方"] * 3 + ["南方"] * 3
})
sns.set_theme(style="whitegrid", font="SimHei")
sns.barplot(data=df_group, x="月份", y="销量", hue="地区", palette="Set2")
plt.title("南北方季度销量对比")
plt.show()