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

相关文章
|
2天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
15 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3天前
|
Python
探索Python装饰器:从入门到实践
【10月更文挑战第32天】在编程世界中,装饰器是一种特殊的函数,它允许我们在不改变原有函数代码的情况下,增加额外的功能。本文将通过简单易懂的语言和实际案例,带你了解Python中装饰器的基础知识、应用以及如何自定义装饰器,让你的代码更加灵活和强大。
11 2
|
5天前
|
设计模式 缓存 测试技术
Python中的装饰器:功能增强与代码复用的艺术####
本文将深入探讨Python中装饰器的概念、用途及实现方式,通过实例演示其如何为函数或方法添加新功能而不影响原有代码结构,从而提升代码的可读性和可维护性。我们将从基础定义出发,逐步深入到高级应用,揭示装饰器在提高代码复用性方面的强大能力。 ####
|
3天前
|
监控 Python
探索Python中的装饰器:从入门到实践
【10月更文挑战第31天】在Python的世界里,装饰器是那些隐藏在幕后的魔法师,它们拥有着改变函数行为的能力。本文将带你走进装饰器的世界,从基础概念到实际应用,一步步揭开它的神秘面纱。你将学会如何用几行代码增强你的函数功能,以及如何避免常见的陷阱。让我们一起来发现装饰器的魔力吧!
|
6天前
|
缓存 测试技术 数据安全/隐私保护
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第29天】本文通过深入浅出的方式,探讨了Python装饰器的概念、使用场景和实现方法。文章不仅介绍了装饰器的基本知识,还通过实例展示了如何利用装饰器优化代码结构,提高代码的可读性和重用性。适合初学者和有一定经验的开发者阅读,旨在帮助读者更好地理解和应用装饰器,提升编程效率。
|
11天前
|
数据采集 机器学习/深度学习 人工智能
Python编程入门:从基础到实战
【10月更文挑战第24天】本文将带你进入Python的世界,从最基础的语法开始,逐步深入到实际的项目应用。我们将一起探索Python的强大功能和灵活性,无论你是编程新手还是有经验的开发者,都能在这篇文章中找到有价值的内容。让我们一起开启Python的奇妙之旅吧!
|
3天前
|
存储 机器学习/深度学习 搜索推荐
Python编程入门:从零开始构建你的第一个程序
【10月更文挑战第32天】本文旨在通过浅显易懂的方式引导编程新手进入Python的世界。我们将一起探索Python的基础语法,并通过实例学习如何构建一个简单的程序。文章将不直接展示代码,而是鼓励读者在阅读过程中自行尝试编写,以加深理解和记忆。无论你是编程初学者还是希望巩固基础知识的开发者,这篇文章都将是你的良师益友。让我们开始吧!
|
4天前
|
开发者 Python
探索Python中的装饰器:从入门到实战
【10月更文挑战第30天】本文将深入浅出地介绍Python中一个强大而有趣的特性——装饰器。我们将通过实际代码示例,一步步揭示装饰器如何简化代码、增强函数功能并保持代码的可读性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效编程的大门。
|
1月前
|
数据可视化 Python
Python 高级绘图:从基础到进阶的可视化实践
本文介绍了使用 Python 的强大绘图库 matplotlib 实现多种图表绘制的方法,包括简单的折线图、多条折线图、柱状图、饼图、散点图及 3D 图的绘制。通过具体代码示例展示了如何设置轴标签、标题、图例等元素,并指出了 matplotlib 支持更多高级绘图功能。来源:https://www.wodianping.com/app/2024-10/47112.html。
74 0
|
数据可视化 数据挖掘 API
《利用Python进行数据分析·第2版》第9章 绘图和可视化
第1章 准备工作第2章 Python语法基础,IPython和Jupyter第3章 Python的数据结构、函数和文件第4章 NumPy基础:数组和矢量计算第5章 pandas入门第6章 数据加载、存储与文件格式第7章 数据清洗和准备第8章 数据规整:聚合、合并和重塑 第9章 绘图和可视化第10章 数据聚合与分组运算第11章 时间序列第12章 pandas高级应用第13章 Python建模库介绍第14章 数据分析案例附录A NumPy高级应用附录B 更多关于IPython的内容(完) 信息可视化(也叫绘图)是数据分析中最重要的工作之一。
1849 0

热门文章

最新文章