Python数据可视化:使用Seaborn库

如果你有使用Python进行数据分析的经验,那么你可能已经绘制了一些数据图来向其他人解释你的分析。你很可能使用过Matplotlib之类的库来生成它们。如果你想将统计可视化提升到一个新的水平,你应该掌握Python seaborn库,以生成令人印象深刻的统计分析图来显示数据。

在本教程中,你将学习到:

1.判断seaborn是否满足你的数据可视化需求
2.理解seaborn经典Python函数式接口的原理
3.理解seaborn更现代的Python对象接口的原理
4.使用seaborn的函数创建Python图形
5.使用seaborn的对象创建Python图形

在开始之前,您应该熟悉JupyterLab中提供的Jupyter Notebook数据分析工具。虽然你可以使用自己喜欢的Python环境学习本seaborn教程,但Jupyter Notebook是首选。您可能还想了解pandas DataFrame如何存储其数据。了解pandas DataFrame和Series之间的差异也是有用的。

在使用seaborn之前,必须安装它。打开Jupyter Notebook,输入!python -m pip install seaborn到新的代码单元格中。当你运行单元格时,seaborn将安装。如果你在命令行中工作,使用相同的命令,只是没有感叹号(!)。安装seaborn后,Matplotlib、pandas和NumPy也将可用。

使用seaborn创建条形图

我们使用seaborn自带的tips数据集为例,演示绘制条形图示例。

In [1]: 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()

输出条形图如下:

如图所见,服务员在周末每天的平均小费略有上升。看起来人们放松的时候会付更多的小费。

理解seaborn的经典函数式接口

seaborn经典函数接口包含一组绘图函数,用于创建不同的绘图类型。在前面使用barplot()函数时,已经看到了一个这样的例子。functional接口将绘图函数分为几个大类。下面的图表展示了三种最常见的方式:

第一列展示了seaborn的关系图,关系图有助于理解数据集中变量对之间的关系。第二类展示seaborn的分布图,可以帮助理解数据集中变量是如何分布的。第三列是seaborn的类别图,也有助于理解数据集中变量对之间的关系。

使用轴函数

Seaborn为此提供了一个scatterplot()轴级函数:

In [2]: import matplotlib.pyplot as plt
   ...: import seaborn as sns
   ...:
   ...: (
   ...:     sns.scatterplot(
   ...:         data=crossings, x="min_temp", y="max_temp"
   ...:     )
   ...:     .set(
   ...:         title="Minimum vs Maximum Temperature",
   ...:         xlabel="Minimum Temperature",
   ...:         ylabel="Maximum Temperature",
   ...:     )
   ...: )
   ...:
   ...: plt.show()

这里使用scatterplot()函数的方式与使用barplot()的方式类似。同样,需要提供DataFrame作为它的数据参数,然后是要绘图的列。作为增强,我们还调用了Matplotlib的Axes.set()方法来为图形指定标题,并使用xlabel和ylabel标记每个轴。默认情况下,没有标题,每个轴根据其数据序列进行标记。使用Axes.set()允许大小写。

scatterplot有一个强大的参数,称为hue。这个参数允许在绘图时为不同类别的数据添加不同的颜色。要使用它,需要传入想要着色的列的名称。

In [3]: (
   ...:    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()

使用图形级函数

有时可能需要多个数据子图,每个子图都显示不同类别的数据。虽然可以手动创建多个图形,但图形级别的函数会自动完成这些工作。与轴级函数一样,row或col参数允许指定在每个子图中显示的行或列数据系列。设置column参数将把每个子图放在它们自己的列中,而设置row参数将为每个子图提供单独的行。

In [1]: import matplotlib.pyplot as plt
   ...: import pandas as pd
   ...: import seaborn as sns
   ...:
   ...: crossings = pd.read_csv("cycle_crossings_apr_jun.csv")
   ...:
   ...: (
   ...:     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对象绘图时,第一个要用到的对象是plot。这个对象引用你正在绘制的数据DataFrame,以及其中你感兴趣的数据的特定列。使用seaborn对象接口时,按照约定要将其导入Python,并指定别名so

In [1]: import pandas as pd
   ...: import seaborn.objects as so
   ...:
   ...: crossings = pd.read_csv("cycle_crossings_apr_jun.csv")
   ...:
   ...: (
   ...:     so.Plot(
   ...:         data=crossings, x="min_temp", y="max_temp"
   ...:     )
   ...:     .show()
   ...: )

创建好so对象后,可以在每一层添加绘图元素,就像r语言ggplot2那样更加灵活绘图。

In [2]: (
   ...:     so.Plot(
   ...:         data=crossings, x="min_temp", y="max_temp"
   ...:      )
   ...:     .add(so.Dot())
   ...:     .label(
   ...:            title="Minimum vs Maximum Temperature",
   ...:            x="Minimum Temperature",
   ...:            y="Maximum Temperature",
   ...:     )
   ...:     .show()
   ...: )
In [3]: (
   ...:     so.Plot(
   ...:         data=crossings, x="min_temp",
   ...:         y="max_temp", color="month",
   ...:     )
   ...:     .add(so.Dot(), marker="month")
   ...:     .label(
   ...:         title="Minimum vs Maximum Temperature",
   ...:         x="Minimum Temperature",
   ...:         y="Maximum Temperature",
   ...:         color=str.capitalize,
   ...:     )
   ...:     .show()
   ...: )
In [4]: (
   ...:     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()
   ...: )

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

拉叭叭小能手

多谢支持~~

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

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

打赏作者

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

抵扣说明:

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

余额充值