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

相关文章
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1天前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。
|
9月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
115 1
|
4月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
156 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
4月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
415 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置

热门文章

最新文章

推荐镜像

更多