Seaborn数据可视化实战教程:从基础到高级图表绘制
前言
Seaborn是基于Matplotlib的高级Python数据可视化库,它提供了更简洁的API和更美观的默认样式。本教程将带你全面掌握Seaborn的核心功能,包括条形图、分布图、关系图等多种图表类型的创建方法。
环境准备
首先确保已安装Seaborn库:
! python -m pip install seaborn
基础条形图绘制
使用Seaborn创建条形图
Seaborn的barplot()
函数是创建条形图的最简单方式。以下示例展示了如何绘制每日小费平均值的条形图:
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
(
sns.barplot(
data=tips, x="day", y="tip", estimator="mean", errorbar=None
).set(title="Daily Tips ($)")
)
plt.show()
这段代码中:
data
参数指定数据源x
和y
参数分别指定x轴和y轴的数据列estimator="mean"
表示计算平均值errorbar=None
表示不显示误差条
与Matplotlib条形图对比
为了展示Seaborn的简洁性,我们对比用原生Matplotlib实现相同效果的代码:
import matplotlib.pyplot as plt
import pandas as pd
tips = pd.read_csv("tips.csv")
average_daily_tip = tips.groupby(["day"])["tip"].mean()
days = ["Thur", "Fri", "Sat", "Sun"]
daily_averages = [
average_daily_tip["Thur"],
average_daily_tip["Fri"],
average_daily_tip["Sat"],
average_daily_tip["Sun"],
]
fig, ax = plt.subplots()
plt.bar(x=days, height=daily_averages)
ax.set_xlabel("day")
ax.set_ylabel("tip")
ax.set_title("Daily Tips ($)")
plt.show()
明显可以看出,Seaborn用一行代码就完成了Matplotlib需要多行代码才能实现的功能。
高级图表类型
散点图与关系图
Seaborn提供了多种关系图绘制方法,以下是温度数据的散点图示例:
import matplotlib.pyplot as plt
import seaborn as sns
crossings = pd.read_csv("cycle_crossings_apr_jun.csv")
(
sns.scatterplot(data=crossings, x="min_temp", y="max_temp").set(
title="Minimum vs Maximum Temperature",
xlabel="Minimum Temperature",
ylabel="Maximum Temperature",
)
)
plt.show()
我们可以通过添加更多参数来增强可视化效果:
(
sns.scatterplot(
data=crossings,
x="min_temp",
y="max_temp",
hue="month",
size="month",
style="month",
).set(
title="Minimum vs Maximum Temperature",
xlabel="Minimum Temperature",
ylabel="Maximum Temperature",
)
)
plt.legend(title="Month")
plt.show()
分面图
Seaborn的relplot()
函数可以轻松创建分面图:
(
sns.relplot(
data=crossings,
x="min_temp",
y="max_temp",
kind="scatter",
hue="month",
col="month",
)
.set(
title="Minimum vs Maximum Temperature",
xlabel="Minimum Temperature",
ylabel="Maximum Temperature",
)
.legend.set_title("Month")
)
plt.show()
Seaborn现代对象接口
Seaborn最新版本引入了更现代的面向对象接口:
import seaborn.objects as so
(
so.Plot(data=crossings, x="min_temp", y="max_temp", color="month")
.add(so.Dot(), marker="month")
.facet(col="month")
.layout(size=(15, 5))
.label(
title="Minimum vs Maximum Temperature",
x="Minimum Temperature",
y="Maximum Temperature",
color=str.capitalize,
)
.show()
)
这种接口提供了更灵活的图表构建方式,适合复杂可视化需求。
分类数据可视化
多类别条形图
处理分类数据时,我们可以创建分组条形图:
bridge_crossings = crossings.melt(
id_vars=["day", "date"],
value_vars=["Brooklyn", "Manhattan", "Williamsburg", "Queensboro"],
var_name="Bridges",
value_name="Crossings",
).rename(columns={"day": "Day", "date": "Date"})
sns.barplot(
data=bridge_crossings,
x="Day",
y="Crossings",
hue="Bridges",
errorbar=None,
estimator="sum",
)
plt.show()
箱线图
箱线图是展示数据分布的强大工具:
wednesday_crossings = crossings.loc[crossings.day.isin(["Wednesday"])].rename(
columns={"month": "Month"}
)
(
sns.boxplot(
data=wednesday_crossings, x="day", y="Williamsburg", hue="Month"
).set(xlabel=None)
)
plt.show()
分布可视化
直方图与核密度估计
Seaborn提供了多种展示数据分布的方法:
# 直方图
sns.histplot(data=cereals_data, x="Rating", bins=10).set(
title="Cereal Ratings Distribution"
)
# 核密度估计图
sns.kdeplot(data=cereals_data, x="Rating").set(
title="Cereal Ratings KDE Curve"
)
# 结合使用
sns.histplot(data=cereals_data, x="Rating", kde=True, bins=10)
plt.show()
分组分布图
我们可以按制造商分组展示谷物评分分布:
sns.displot(
data=cereals_data,
x="Rating",
bins=10,
hue="Manufacturer",
kde=True,
col="Manufacturer",
)
plt.show()
关系图与时间序列
折线图
展示时间序列数据时,折线图是理想选择:
sns.set_theme(style="darkgrid")
(
sns.lineplot(data=crossings, x="date", y="Brooklyn").set(
title="Brooklyn Bridge Daily Crossings", xlabel=None
)
)
plt.xticks(
ticks=["01/04/2017", "01/05/2017", "01/06/2017", "30/06/2017"], rotation=45
)
plt.show()
总结
本教程全面介绍了Seaborn库的核心功能,从基础条形图到复杂的分面图和分布图。Seaborn通过简洁的API和美观的默认样式,大大简化了数据可视化工作流程。无论是探索性数据分析还是制作出版级图表,Seaborn都是Python数据科学家的强大工具。
记住,良好的可视化不仅能展示数据,更能讲述数据背后的故事。通过本教程学到的技能,你将能够创建信息丰富且美观的数据可视化作品。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考