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常见绘图总结

相关文章
|
4天前
|
数据挖掘 数据处理 Python
Python编程入门:从基础到实践
【6月更文挑战第26天】这篇文章引导读者逐步学习Python编程,从基础语法如变量、数据类型(整数、浮点数、字符串)到条件语句、循环(if/for/while),再到函数定义和模块导入。通过实例展示了Python在文本处理、数据分析(使用pandas)和Web开发(使用Flask)的应用。学习Python能为初学者开启更广阔的技术领域,如面向对象编程、并发和网络编程等。
|
3天前
|
自然语言处理 编译器 PHP
Python入门
【6月更文挑战第27天】Python入门。
10 3
|
7天前
|
Python
Python的`os`模块核心功能概述:通过`os.getcwd()`获取
【6月更文挑战第23天】Python的`os`模块核心功能概述:通过`os.getcwd()`获取、`os.chdir()`改变工作目录;使用`os.mkdir()`, `os.makedirs()`创建目录,`os.rmdir()`, `os.removedirs()`删除;`os.rename()`, `os.renames()`重命名文件或目录;`os.remove()`删除文件;`os.listdir()`列出目录内容;`os.path.exists()`, `os.path.isfile()`, `os.path.isdir()`检查路径;`os.stat()`获取文件属性。
20 4
|
3天前
|
Python
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
技术经验解读:【Python】torrentParser1.04增加获得磁力链URI功能
|
4天前
|
Python
python3 入门学习笔记
python3 入门学习笔记
5 0
|
5天前
|
分布式计算 数据挖掘 索引
26段简短代码入门Python
26段简短代码入门Python
|
6天前
|
JavaScript 前端开发 Java
python的入门基础知识和一些小技巧
python的入门基础知识和一些小技巧
|
9天前
|
缓存 数据库连接 开发者
Python中有哪些容易被忽视的核心功能
Python编程中,一些被忽视的核心功能包括:`argparse`库用于命令行参数解析,简化工具编写;使用`with`语句配合上下文管理器确保资源正确释放;列表推导式和生成器表达式创建列表和轻量级迭代;字典的`setdefault()`方法避免键不存在时的额外检查;默认参数值简化函数调用;`namedtuple`增加元组可读性;集合操作符执行并集、交集和差集;`lru_cache`缓存函数调用提高性能;`enumerate()`在迭代列表时同时访问索引和值;以及`Counter`统计元素频率。掌握这些功能可提升代码质量和效率。
|
机器学习/深度学习 数据采集 人工智能
Python数据分析 | seaborn工具与数据可视化
对于使用Python快捷地进行数据分析可视化而言,Seaborn是一个简单易用的选择。Seaborn 核心库进行了更高阶的 API 封装,可以轻松地画出配色更加舒服、图形元素的样式更加细腻的图形。
512 0
Python数据分析 | seaborn工具与数据可视化
|
8天前
|
机器学习/深度学习 人工智能 前端开发
Python中的模块化编程
【6月更文挑战第17天】Python模块化编程与软件架构设计的关键在于拆分任务到独立模块,提高代码的可维护性、可重用性和可扩展性。例如,学生管理系统可分解为录入、查询和删除模块。MVC和MVVM架构模式有助于组织代码,而微服务和函数式编程将在未来发展中扮演重要角色。通过示例代码,读者能学习如何实现这些概念,提升项目开发效率和质量。
155 57