什么是Seaborn?

Seaborn是一个基于Matplotlib构建的Python数据可视化库,专注于统计图形的绘制。它通过提供高级接口和美观的默认主题,大大简化了统计数据可视化的过程。与Matplotlib相比,Seaborn具有以下优势:

  1. 1.更简洁的API,减少样板代码
  2. 2.内置美观的默认样式和调色板
  3. 3.对Pandas数据结构的原生支持
  4. 4.内置多种统计图形类型
  5. 5.自动计算和绘制统计估计值

安装Seaborn

Seaborn可以通过pip或conda安装:

# 使用pip安装
pip install seaborn

# 使用conda安装
conda install seaborn

如果需要使用国内镜像源加速下载(如清华源):

pip install seaborn -i https://pypi.tuna.tsinghua.edu.cn/simple

导入和基本设置

使用Seaborn前需要导入库并设置主题:

import seaborn as sns
import matplotlib.pyplot as plt  # 通常也需要导入matplotlib

# 设置主题
sns.set_theme()

set_theme()函数可以自定义样式和上下文:

sns.set_theme(
    style="whitegrid",  # 主题样式
    context="paper",    # 上下文环境
    palette="deep",     # 调色板
    font="sans-serif",  # 字体
    font_scale=1        # 字体缩放比例
)

样式(style)选项:

  • "darkgrid":灰色背景+白色网格(默认)
  • "whitegrid":白色背景+灰色网格
  • "dark":灰色背景,无网格
  • "white":白色背景,无网格
  • "ticks":白色背景+坐标轴刻度

上下文(context)选项:

  • "paper":适合论文的小尺寸
  • "notebook":适合笔记本的中等尺寸(默认)
  • "talk":适合演讲的大尺寸
  • "poster":适合海报的更大尺寸

常用图形类型及代码示例

1. 散点图(scatterplot)

散点图用于展示两个连续变量之间的关系。

# 使用内置数据集
tips = sns.load_dataset("tips")

# 绘制散点图
sns.scatterplot(
    data=tips,
    x="total_bill",  # x轴数据
    y="tip",         # y轴数据
    hue="time",      # 按时间分组着色
    style="sex",     # 按性别分组使用不同标记
    size="size",     # 按人数分组设置点大小
    alpha=0.7        # 设置透明度
)

plt.title("小费与账单金额关系")
plt.xlabel("账单金额($)")
plt.ylabel("小费金额($)")
plt.show()

2. 折线图(lineplot)

折线图适合展示数据随时间或其他连续变量的变化趋势。

# 使用内置数据集
flights = sns.load_dataset("flights")

# 转换为宽格式便于绘图
flights_wide = flights.pivot("year", "month", "passengers")

# 绘制折线图
sns.lineplot(
    data=flights_wide,
    palette="viridis",  # 使用viridis调色板
    linewidth=2.5,      # 线宽
    markers=True,       # 显示标记点
    dashes=False        # 不使用虚线
)

plt.title("1949-1960年每月航班乘客数")
plt.xlabel("年份")
plt.ylabel("乘客数")
plt.legend(title="月份", bbox_to_anchor=(1.05, 1), loc='upper left')
plt.show()

3. 柱形图(barplot)

柱形图用于比较不同类别的数值。

# 绘制柱形图
sns.barplot(
    data=tips,
    x="day",       # x轴类别
    y="total_bill", # y轴数值
    hue="sex",     # 分组着色
    ci="sd",       # 误差线显示标准差
    palette="pastel",  # 使用柔和色调
    saturation=0.8     # 饱和度
)

plt.title("每日账单金额按性别分布")
plt.xlabel("星期几")
plt.ylabel("平均账单金额($)")
plt.legend(title="性别")
plt.show()

4. 箱线图(boxplot)

箱线图展示数据的分布情况,包括中位数、四分位数和离群值。

# 绘制箱线图
sns.boxplot(
    data=tips,
    x="day",        # x轴类别
    y="total_bill", # y轴数值
    hue="time",     # 分组着色
    palette="Set3", # 使用Set3调色板
    linewidth=2.5,  # 线宽
    fliersize=5     # 离群点大小
)

plt.title("每日账单金额分布")
plt.xlabel("星期几")
plt.ylabel("账单金额($)")
plt.legend(title="用餐时间")
plt.show()

5. 热图(heatmap)

热图常用于展示矩阵数据,如相关性矩阵。

# 计算相关性矩阵
corr = tips.corr()

# 绘制热图
sns.heatmap(
    corr,
    annot=True,      # 显示数值
    fmt=".2f",       # 数值格式
    cmap="coolwarm", # 使用冷暖色系
    center=0,        # 中心值
    linewidths=.5,   # 单元格间线宽
    square=True      # 使单元格为正方形
)

plt.title("账单金额、小费和人数相关性")
plt.show()

6. 小提琴图(violinplot)

小提琴图结合了箱线图和核密度估计,展示数据的分布形状。

# 绘制小提琴图
sns.violinplot(
    data=tips,
    x="day",        # x轴类别
    y="total_bill", # y轴数值
    hue="sex",      # 分组着色
    split=True,     # 将分组显示在同一小提琴中
    palette="muted",# 使用柔和的调色板
    inner="quartile",# 内部显示四分位数
    bw=.2           # 核密度估计的带宽
)

plt.title("每日账单金额分布(按性别)")
plt.xlabel("星期几")
plt.ylabel("账单金额($)")
plt.legend(title="性别")
plt.show()

总结

Seaborn作为Python中强大的统计可视化工具,通过简洁的API提供了丰富的图形类型:

  1. 1.​散点图​:展示两个连续变量间的关系
  2. 2.​折线图​:展示数据随时间或连续变量的变化趋势
  3. 3.​柱形图​:比较不同类别的数值
  4. 4.​箱线图​:展示数据的分布和离群值
  5. 5.​热图​:可视化矩阵数据,如相关性
  6. 6.​小提琴图​:结合箱线图和密度估计展示数据分布

每种图形都有其适用的场景,选择正确的图形类型能更有效地传达数据中的信息。通过调整参数如huestylesize等,可以在一张图中展示多个维度的信息。

Seaborn与Pandas无缝集成,能够直接处理DataFrame数据结构,大大简化了数据可视化的工作流程。对于更复杂的需求,还可以结合Matplotlib进行深度定制。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐