Seaborn数据可视化实战教程:从基础到高级图表绘制

Seaborn数据可视化实战教程:从基础到高级图表绘制

materials Bonus materials, exercises, and example projects for our Python tutorials materials 项目地址: https://gitcode.com/gh_mirrors/ma/materials

前言

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参数指定数据源
  • xy参数分别指定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数据科学家的强大工具。

记住,良好的可视化不仅能展示数据,更能讲述数据背后的故事。通过本教程学到的技能,你将能够创建信息丰富且美观的数据可视化作品。

materials Bonus materials, exercises, and example projects for our Python tutorials materials 项目地址: https://gitcode.com/gh_mirrors/ma/materials

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱行方Mountain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值