Seaborn数据可视化入门基础
·
什么是Seaborn?
Seaborn是一个基于Matplotlib构建的Python数据可视化库,专注于统计图形的绘制。它通过提供高级接口和美观的默认主题,大大简化了统计数据可视化的过程。与Matplotlib相比,Seaborn具有以下优势:
- 1.更简洁的API,减少样板代码
- 2.内置美观的默认样式和调色板
- 3.对Pandas数据结构的原生支持
- 4.内置多种统计图形类型
- 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.散点图:展示两个连续变量间的关系
- 2.折线图:展示数据随时间或连续变量的变化趋势
- 3.柱形图:比较不同类别的数值
- 4.箱线图:展示数据的分布和离群值
- 5.热图:可视化矩阵数据,如相关性
- 6.小提琴图:结合箱线图和密度估计展示数据分布
每种图形都有其适用的场景,选择正确的图形类型能更有效地传达数据中的信息。通过调整参数如hue、style、size等,可以在一张图中展示多个维度的信息。
Seaborn与Pandas无缝集成,能够直接处理DataFrame数据结构,大大简化了数据可视化的工作流程。对于更复杂的需求,还可以结合Matplotlib进行深度定制。
更多推荐
所有评论(0)