seaborn从入门到精通03-绘图功能实现01-关系绘图

简介: seaborn从入门到精通03-绘图功能实现01-关系绘图




关系-分布-分类


relational “关系型”

distributional “分布型”

categorical “分类型”

456b22d5bb0fef07f5fd71c8faa4cfc8_cbb903f411324180a5e36f891bc3eb8f.png


关系绘图-Visualizing statistical relationships

Statistical analysis is a process of understanding how variables in a dataset relate to each other and how those relationships depend on other variables. Visualization can be a core component of this process because, when data are visualized properly, the human visual system can see trends and patterns that indicate a relationship.

统计分析是一个理解数据集中的变量如何相互关联以及这些关系如何依赖于其他变量的过程。可视化可以是这个过程的核心组成部分,因为当数据被正确地可视化时,人类的视觉系统可以看到表明关系的趋势和模式。

We will discuss three seaborn functions in this tutorial. The one we will use most is relplot(). This is a figure-level function for visualizing statistical relationships using two common approaches: scatter plots and line plots. relplot() combines a FacetGrid with one of two axes-level functions:

我们将在本教程中讨论三个seaborn函数。我们将使用最多的一个是relplot()。这是一种用两种常见方法可视化统计关系的数字级函数:scatter plots 和line plots。relplot()结合了一个由两个轴级函数之一的FacetGrid:


scatterplot() (with kind=“scatter”; the default)
lineplot() (with kind=“line”)


As we will see, these functions can be quite illuminating because they use simple and easily-understood representations of data that can nevertheless represent complex dataset structures. They can do so because they plot two-dimensional graphics that can be enhanced by mapping up to three additional variables using the semantics of hue, size, and style.

正如我们所看到的,这些函数可以很有启发性,因为它们使用简单易懂的数据表示,而数据可以表示复杂的数据集结构。它们可以这样做,因为它们绘制二维图形,可以通过使用色相、大小和样式的语义映射到三个额外的变量。


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")

散点图表示变量关系-replot

参考:http://seaborn.pydata.org/generated/seaborn.relplot.html


seaborn.relplot(data=None, *, x=None, y=None, hue=None, size=None, style=None, units=None, row=None, col=None, col_wrap=None, 
row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, 
markers=None, dashes=None, style_order=None, legend='auto', kind='scatter', height=5, aspect=1, facet_kws=None, **kwargs)

在所有的seaborn绘图时,里面的参数是众多的,但是不用担心,大部分参数是相同的,只有少部分存在差异,有些通过对单词的理解就可知道其含义,这里我只根据每个具体的图形重要的参数做一些解释,并简单的介绍这些常用参数的含义。

x,y:容易理解就是你需要传入的数据,一般为dataframe中的列;

hue:也是具体的某一可以用做分类的列,作用是分类;

data:是你的数据集,可要可不要,一般都是dataframe;

style:绘图的风格(后面单独介绍);

size:绘图的大小(后面介绍);

palette:调色板(后面单独介绍);

markers:绘图的形状(后面介绍);

ci:允许的误差范围(空值误差的百分比,0-100之间),可为‘sd’,则采用标准差(默认95);

n_boot(int):计算置信区间要使用的迭代次数;

alpha:透明度;

x_jitter,y_jitter:设置点的抖动程度。


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_theme(style="darkgrid")
tips = sns.load_dataset("tips",cache=True,data_home=r'.\seaborn-data')
tips.head()

024dd3c34303960dbea00318253031fe_0cc56067eea14fa7a09330df249f096c.png


案例1-关系散点图replot

ax =sns.relplot(data=tips, x="total_bill", y="tip")
ax.figure.set_size_inches(5,5)
plt.title("1")

cb2dd6d6aa51c5cfabe1ecebda0758e8_6cc26e38d36f4e488af166d2a4af52b2.png


案例2-添加hue参数和style参数

# hue参数是用来控制第三个变量的颜色显示的
ax=sns.relplot(data=tips, x="total_bill", y="tip", hue="smoker")
ax.figure.set_size_inches(5,5)
plt.title("2-hue-分类")

e417f2f9f8fa7eb10e2c351fc7b097ab_ecbd2a21c5a04916b394e90bd14fd484.png

# hue参数是用来控制第三个变量的颜色显示的 style为标记样式
ax=sns.relplot(
    data=tips,
    x="total_bill", y="tip", hue="smoker", style="smoker"
)
ax.figure.set_size_inches(5,5)
plt.title("3-hue-style-相同的离散值")


bdbd3c0857034fda2d304ea55aa2fe06_7c2858b5563d4bf4b18bdeaeeda2d7a7.png

ax=sns.relplot(
    data=tips,
    x="total_bill", y="tip", hue="smoker", style="time",
)
ax.figure.set_size_inches(5,5)
plt.title("4-hue-style不同的离散值")

f019e916c3275fd18c6d8b7413cc0ba8_393cd28510144cad986035b7284460fe.png


ax=sns.relplot(
    data=tips, x="total_bill", y="tip", hue="size",
)
ax.figure.set_size_inches(5,5)
plt.title("5-hue为连续值")
plt.show()

63fc1fbb0c6cdfdcd06362bd7b425c8a_c2ebdccde9d2487fa4b98b681cb9a14d.png


案例3-添加size参数和sizes参数

sns.relplot(
    data=tips, x="total_bill", y="tip",
    size="size", sizes=(15, 200)
)
ax.figure.set_size_inches(5,5)
plt.title("6-指定点大小以及点范围")


20833536a38fb366aad1aab2c59eba28_ab0edef610164bb780e155391670fdd8.png

案例4-添加col和row参数

col和row,可以将图根据某个属性的值的个数分割成多列或者多行。比如在以上图的基础之上我们想要把Lunch(午餐)和Dinner(晚餐)分割成两个图来显示,再在row上添加一个新的变量,比如把性别按照行显示出来,那么可以通过以下代码来实现:

ax=sns.relplot(x="total_bill",y="tip",hue="day",
            col="time",row="sex",data=tips)
# ax.figure.set_size_inches(5,5)
plt.suptitle("7-指定col和row")

90c817101fa6daa33cc93de4b9d4e3e0_a60c4c861b704d2d89348cf96a12eab8.png

案例5-添加col_wrap

有时候我们的图有很多,默认情况下会在一行中全部展示出来,那么我们可以通过col_wrap来指定具体多少列。


sns.relplot(x="total_bill",y="tip",hue="day",
            col="time",col_wrap=1,data=tips)

48765ee7c599191b983ab7a0c1045b78_216cab4561d1456599231cdc63c2792a.png


散点图表示变量关系-scatter

参考:

http://seaborn.pydata.org/generated/seaborn.scatterplot.html

seaborn.scatterplot(data=None, *, x=None, y=None, hue=None, size=None, style=None, palette=None, hue_order=None, 
hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=True, style_order=None, legend='auto', ax=None, **kwargs)

案例1-结合子图绘制散点图

fig,axes=plt.subplots(1,1)
ax = sns.scatterplot(x="total_bill", y="tip", data=tips,ax=axes)

f7018f93758c492ad3f46226c0bcce0f_7b562025040749729eb330c2f3841b69.png


案例2-指定hue分类,style样式,size大小

fig,axes=plt.subplots(1,1)
ax = sns.scatterplot(x="total_bill", y="tip",hue="day",
 style="time",size='size',data=tips,ax=axes)

4177f4b6e6fd404a30c111c2c9ee58ee_bc69086fee6f47499793458c39db7732.png


线图绘制变量关系-relplot

读取数据-flights dataset

flights dataset航班数据集有10年的每月航空乘客数据:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as  mpl
import seaborn as sns
sns.set_theme(style="darkgrid")
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
flights = sns.load_dataset("flights",cache=True,data_home=r'.\seaborn-data')
flights.head()

year month passengers

0 1949 Jan 112

1 1949 Feb 118

2 1949 Mar 132

3 1949 Apr 129

4 1949 May 121


案例1-折线图基于replot

may_flights = flights.query("month == 'May'")
sns.relplot(data=may_flights, x="year", y="passengers",kind="line")


28d5a9d6c3e6b7b1e2b6368fb4892622_b3ea40234be548aab289989663bdeeef.png

线图绘制变量关系-lineplot

参考:http://seaborn.pydata.org/generated/seaborn.lineplot.html


seaborn.lineplot(data=None, *, x=None, y=None, hue=None, size=None, style=None, units=None, palette=None, hue_order=None, 
hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, estimator='mean', 
errorbar=('ci', 95), n_boot=1000, seed=None, orient='x', sort=True, err_style='band', err_kws=None, legend='auto', 
ci='deprecated', ax=None, **kwargs)

读取数据-flights dataset

flights dataset航班数据集有10年的每月航空乘客数据:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as  mpl
import seaborn as sns
sns.set_theme(style="darkgrid")
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
flights = sns.load_dataset("flights",cache=True,data_home=r'.\seaborn-data')
flights.head()

year month passengers

0 1949 Jan 112

1 1949 Feb 118

2 1949 Mar 132

3 1949 Apr 129

4 1949 May 121


案例1-折线图基于replot-单线

may_flights = flights.query("month == 'May'")
sns.lineplot(data=may_flights, x="year", y="passengers")


1ebf39ea96e933546d8735384479164b_afd71608db854e3d97fbf525011c5043.png

案例2-折线图基于lineplot-多线

#使用标记而不是破折号来识别组
ax = sns.lineplot(x="year", y="passengers",hue="month", style="month",
markers=True, dashes=False, data=flights)


e9c08d58f4f270cca7ca9f0848283753_406fc176689241278da01d8308cc5185.png

案例3-折线图基于lineplot-显示置信区间

以长期模式传递整个数据集将对重复值(每年)进行聚合,以显示平均值和95%置信区间:

ax = sns.lineplot(x="year", y="passengers",data=flights)

a1730cb969e628e67c43014c1cc85a90_2a68239284444c25b08e45067518d1cf.png

置信区间是使用自举计算的,对于较大的数据集,这可能是时间密集型的。因此可以禁用它们:

ax = sns.lineplot(x="year", y="passengers",data=flights,errorbar=None,)

b62e95b1b1f1f91da854c71467668e0e_018c4e5b13074011bfb2fcfd1c5568f5.png


另一个很好的选择,特别是对于较大的数据,是通过绘制标准偏差而不是置信区间来表示每个时间点的分布分布:

ax = sns.lineplot(x="year", y="passengers",data=flights,errorbar="sd",)

e786fcf60fc924db8f1def71fb8199f3_1e6eb2b2ace343c989cc6ca60d42a551.png


案例4-折线图-指定方向

使用orient参数沿图的垂直维度进行聚合和排序:


sns.lineplot(data=flights, x="passengers", y="year", orient="y") 

e0ff8d21a71fd008c781d9cbd8760d5d_b42971d0a6de40d48f46bdf73c323c58.png


总结

本文主要是seaborn从入门到精通系列第3篇,本文介绍了seaborn的绘图功能实现,本文是关系绘图,同时介绍了较好的参考文档置于博客前面,读者可以重点查看参考链接。本系列的目的是可以完整的完成seaborn从入门到精通。重点参考连接


参考

seaborn官方

seaborn官方介绍

seaborn可视化入门

【宝藏级】全网最全的Seaborn详细教程-数据分析必备手册(2万字总结)

Seaborn常见绘图总结

相关文章
|
28天前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
70 0
|
9天前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
89 1
|
3天前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
163 101
|
10天前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
161 99
|
10天前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
143 98
|
14天前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
14天前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
83 5
|
27天前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。
|
Linux Python
【Python】300行代码实现crontab定时器功能 【上】
熟悉Linux的都知道在Linux下有一个crontab的定时任务,可以很方便的进行各种定时、计划任务的执行。有时候写代码也需要用到定时器业务,因此我使用Python实现了一个类似的定时器模块,可以很方便的做定时业务,使用例子如下:
521 0
【Python】300行代码实现crontab定时器功能 【上】
|
Python
使用python实现一个文件搜索功能,类似于Everything功能
一般人日常总是会将一些片段信息记录到文件中,放到电脑硬盘上。等过段时间,可能就不知道放到哪里了,电脑上文件夹太多。 找文件一般都会借助于搜索软件,比如Everything软件就很强大,输入名称,就能全局查找文件;
713 0

推荐镜像

更多