Seaborn 数据可视化入门与进阶

Published by rcdfrd on 2026-01-12

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()