Seaborn系列目录


文章目录

  • 1. 关系绘图API概述
  • 2. relplot散点图
    • 2.1 relplot简单的关系绘图
    • 2.2 relplot颜色(hue)分组绘图
    • 2.3 relplot样式(style)分组绘图
    • 2.4 relplot多子图绘图
  • 3. relplot折线图
    • 3.1 relplot折线图(是否自动排序绘图)
    • 3.2 示例数据集
    • 3.3 relplot折线图(x,y一对多,聚类绘制)
    • 3.4 relplot分组绘图(hue、style、size)
    • 3.5 relplot分组绘图样式
  • 4. scatterplot散点图
  • 5. lineplot折线图

关系绘图、分布统计绘图、类别统计绘图是seaborn中最常用的功能。

1. 关系绘图API概述

统计分析就是了解数据变量之间的关系的过程。seaborn中“统计关系”绘图函数共三个:

  • relplot():通过kind参数指定为"scatter"或"line",可以绘制散点图和折线图。默认为scatter。

    • scatterplot():绘制散点图。绘图效果同replot(kind=“scatter”)
    • lineplot():绘制折线图。绘图效果同replot(kind=“line”)
  • relplot函数为figure级函数,返回FacetGrid对象。FacetGrid对象类似于figure。
  • scatterplot和lineplot函数为axes级函数,返回axes对象。

figure级函数与axes级函数区别见Seaborn系列(一):绘图基础、函数分类、长短数据类型支持

2. relplot散点图

  • sns.relplot(x=None,y=None,data=None,kind="scatter"):根据kind绘制折线图或散点图。

    • 常用参数简介

      • x,y参数:x,y坐标数据。x,y为数组或者是data的key名称(data为DataFrame时,x,y指列名称)。
      • data参数:data为类字典数据。当data不为空时,x,y可以用data的key引用数据。
      • kind参数:scatter指绘制散点图,line指绘制折线图。
    • 分组聚合参数
      • hue参数:用不同颜色对数组分组。hue可以是列表或者data的key。hue的每一个数据绘制一根曲线,给一个图例标签。
      • size参数:用不同点大小对数组分组。数组或者data中的key。每个大小给个图例标签。
      • style参数:用不同的点样式对数据分组。数组或者data中的key。每个样式给一个图例标签。
      • row,col:把row,col指定的数据按照行或列排列到不同的子图。
    • 分组聚合参数样式
      • palette参数:指定hue分组的每组曲线的颜色。
      • markers参数:设置True使用默认点样式。False不显示点。可以用列表为style设置对应点样式(长度必须和style分组数相同)。
      • sizes参数:把size映射到一个指定的区间。
    • 其他参数
      • legend参数:图例显示方式。False不现实图例。brief则hue和size的分组都取等间距样本作为图例。full则把分组内所有数值都显示为图例。auto则自动选择brief或full。
      • height参数:每个子图的高度(单位inch)
      • aspect参数:宽度=aspect×高度

hue,style,size类似,都是用于分组,hue根据颜色分组,style根据点先样式分组,size根据点大小或线粗细分组。每个组在曲线图中就是绘制一根单独的曲线。

以tips小费数据集为例。

>>> tips=sns.load_dataset('tips')
>>> tipstotal_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

数据集为一个餐厅的小费数据。
total_bill为总账单、tip为小费金额;
sex为消费者性别,smoker为是否抽烟,size为用餐人数。
day、time分别为日期、时间。

2.1 relplot简单的关系绘图

sns.relplot(data=tips,x='total_bill',y='tip') #观察账单和小费的关系,绘制散点图
sns.relplot(data=tips,x='total_bill',y='tip',kind='line') #观察账单和小费的关系,绘制折线图

2.2 relplot颜色(hue)分组绘图

sns.relplot(data=tips,x='total_bill',y='tip',hue='day') #分别观察每天的账单和小费的关系。
sns.relplot(data=tips,x='total_bill',y='tip',hue='smoker') #分别观察抽烟和不抽烟人群的账单和小费的关系。
sns.relplot(data=tips,x='total_bill',y='tip',hue='size') #根据就餐人数,分别观察人群的账单和小费的关系。

hue分组后对不同的组用不同的颜色区分。

  • 用palette参数可以指定hue映射的颜色。palette参数可以是字符串、列表、字典或者colormap。

    • 字符串:color_palette()函数的参数。

      • seaborn的palette名称,比如deep,muted,bright,pastel,dark,colorblind等。
      • matplotlib的colormap名称,比如Oranges, coolwarm。
      • ‘hsl’或者’huls’:表示hsl颜色系统或者huls颜色系统。
      • 加关键字处理颜色:‘light:’, ‘dark:’, ‘blend:,’
      • cubehelix函数参数字符串‘ch:’:比如"ch:s=.25,rot=-.25",“ch:2,r=.2,l=.6”
    • 列表:比如(‘r’,‘b’,‘gray’)长度必须和hue分组数相同。
    • colormap:可以用字符串名称,比如"coolwarm"。也可以为colormap实例。
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',palette='coolwarm')  #用colormap指定颜色
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',palette='ch:start=2,rot=.5') #用cubehelix参数指定颜色
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',palette=('r','g','b','gray')) #用列表参数指定颜色

palette用列表或字典时,长度必须和hue分组数相同。比如上例中,day共有4种,因此,palette=(‘r’,‘b’,‘g’,‘gray’)是ok的。

2.3 relplot样式(style)分组绘图

style参数和hue类似,对参数不同的数据分组到不同的样式。

具体是什么样式有函数自行确定,或者根据marker参数确定。

#style分组
sns.relplot(data=tips,x='total_bill',y='tip',style="smoker")  #抽烟的人一个样式,不抽烟的人一个样式。
sns.relplot(data=tips,x='total_bill',y='tip',hue='smoker',style="smoker")  #组合样式
sns.relplot(data=tips,x='total_bill',y='tip',hue='smoker',style="time") #组合样式#style+marker
sns.relplot(data=tips,x='total_bill',y='tip',style="time",markers=["o","*"]) #用markers参数指定style分组点样式

通常style的每个分组的点样式有系统自行决定。用marker可以自行指定,但是比较麻烦,且有限制,比如长度必须和style的分组个数相同;列表中只能全部是填充点,如(“o”,"*"),或者全部是线条点,比如("+",“x”)

size分组,区分点大小绘制

#size分组
sns.relplot(data=tips,x='total_bill',y='tip',size="smoker")#size分组(根据是否抽烟,分组)
sns.relplot(data=tips,x='total_bill',y='tip',hue='smoker',size="size")#hue+size
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style="size",size="smoker")#hue+style+size#设置大小数值
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',size="size",sizes=(10,200)) #把size映射到10-200区间,用于显示大小

对于散点图,style和size和hue相似都是分组参数,知识分组表示方法不同。hue用颜色区分,style用点样式区分,size用点大小区分。

size参数可以直接用于设置点大小,但是size数据的大小不太适合显示,比如都特别小,或者差异不明显不便于观看,怎么办?
把size参数直接处理肯定是可以的,但是为了显示就破坏原始数据并不好。用sizes参数可以把size映射到一个指定的区间

2.4 relplot多子图绘图

根据row和col参数值,可以把图形绘制到多个子图。每行表达row数据的一个值,每列表达col数据的一个值。

col_wrap

sns.relplot(data=tips,x='total_bill',y='tip',col='smoker')     #不同子图绘制smoker不同的图形,绘制在不同的行
sns.relplot(data=tips,x='total_bill',y='tip',row='smoker',col='time') #用不同的行绘制子图区分smoker,不同的列子图区分time
sns.relplot(data=tips,x='total_bill',y='tip',hue='smoker',col='time') #根据time绘制多列子图,每个子图用hue分组
sns.relplot(data=tips,x='total_bill',y='tip',hue='smoker',col='day',col_wrap=2) #每列最多2个子图,超过2个自动换行




3. relplot折线图

折线图和散点图类似,kind参数设置为line,其他大部分参数都相同。

  • sns.relplot(x=None,y=None,data=None,kind="scatter"):根据kind绘制折线图或散点图。

    • 常用参数简介

      • x,y参数:x,y坐标数据。x,y为数组或者是data的key名称(data为DataFrame时,x,y指列名称)。
      • data参数:data为类字典数据。当data不为空时,x,y可以用data的key引用数据。
      • kind参数:scatter指绘制散点图,line指绘制折线图。
    • 分组聚合参数
      • hue参数:用不同颜色对数组分组。hue可以是列表或者data的key。hue的每一个数据绘制一根曲线,给一个图例标签。
      • size参数:用不同点大小对数组分组。数组或者data中的key。每个大小给个图例标签。
      • style参数:用不同的点样式对数据分组。数组或者data中的key。每个样式给一个图例标签。
      • row,col:把row,col指定的数据按照行或列排列到不同的子图。
    • 分组聚合参数样式
      • palette参数:指定hue分组的每组曲线的颜色。
      • markers参数:设置True使用默认点样式。False不显示点。可以用列表为style设置对应点样式(marker列表长度必须和style分组数相同)。
      • dashes参数:bool设置是否使用默认线样式(实线)。用列表为style分组设置对应线样式(列表长度必须和style分组数相同)。
      • sizes参数:把size映射到一个指定的区间。
    • 折线图专用参数
      • sort参数:是否对x排序。默认为True。False则按照数组中x的顺序绘图。
      • ci参数:,当存在x值对应多个y值时,用置信区间绘制线条,默认显示95%置信区间(confidence intervals)。
        • ci=None表示不显示置信区间。
        • ci='sd’表示显示标准偏差(standard deviation)而不是置信区间。
        • ci=数值:表示指定置信区间的数值。
      • estimator参数:聚合设置,默认为平均值
        • estimator=None:不使用聚合,x对应多个y就每个x坐标绘制多个y点。
        • estimator=func:聚合函数,比如mean,sum等。
    • 其他参数
      • legend参数:图例显示方式。False不现实图例。brief则hue和size的分组都取等间距样本作为图例。full则把分组内所有数值都显示为图例。auto则自动选择brief或full。
      • height参数:每个子图的高度(单位inch)
      • aspect参数:宽度=aspect×高度

3.1 relplot折线图(是否自动排序绘图)

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
df=pd.DataFrame(np.random.randn(500, 2).cumsum(axis=0), columns=["x", "y"])sns.relplot(data=df,x="x",y="y",kind="line")
sns.relplot(data=df,x="x",y="y",kind="line",sort=False)
plt.show()

折线图默认会把坐标按x从小到大排序。参数sort设置为False,则不排序。

3.2 示例数据集

以fmri数据集为例

>>> fmri=sns.load_dataset('fmri')
>>> fmri
fmrisubject  timepoint event    region    signal
0        s13         18  stim  parietal -0.017552
1         s5         14  stim  parietal -0.080883
2        s12         18  stim  parietal -0.081033
3        s11         18  stim  parietal -0.046134
4        s10         18  stim  parietal -0.037970
...      ...        ...   ...       ...       ...
1059      s0          8   cue   frontal  0.018165
1060     s13          7   cue   frontal -0.029130
1061     s12          7   cue   frontal -0.004939
1062     s11          7   cue   frontal -0.025367
1063      s0          0   cue  parietal -0.006899

fmri是一组事件相关功能核磁共振成像数据。
subject为14个测试者。timpoint为时间点。event为事件,分为刺激stim和暗示cue。region为区域,分为额叶和前叶。signal为信号。

3.3 relplot折线图(x,y一对多,聚类绘制)

import matplotlib.pyplot as plt
import seaborn as sns
fmri=sns.load_dataset('fmri')sns.relplot(data=fmri,x="timepoint",y="signal",kind="line")
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",ci=None)plt.show()

注意时间和信号并非一一对应,而是一个x对应多个y值。所以线条显示的是y的平均值,填充色把y的95%置信区间范围显示出来了。

对于大数据集,绘制置信区间可能需要较多时间。设置ci=None可以禁用绘制置信区间。
设置ci='sd’绘制标准差,而不是置信区间,对较大数据也是要给不错的选择。

折线图(x,y一对多,关闭聚合,不绘制均值也也不绘制置信区间)

estimator=None可以关闭聚合设置,直接用x,y点绘图,即每个x绘制多个y,当然这样绘制的图形可能会比较奇怪。

estimator也可以设置为聚合函数(如sum,mean,max等),用聚合函数将一个x值对应的多个y值计算成一个值。

import matplotlib.pyplot as plt
import seaborn as sns
fmri=sns.load_dataset('fmri')# sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",estimator=None) #不聚合
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",estimator=sum) #聚合函数为sumplt.show()

注意y坐标值为sum。

3.4 relplot分组绘图(hue、style、size)

import matplotlib.pyplot as plt
import seaborn as sns
fmri=sns.load_dataset('fmri')sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",hue="event") #hue分组
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",style="event") #style分组
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",size="event") #size分组plt.show()

sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",hue="event",style="region") #hue+style
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",hue="event",size="region") #hue+size
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",style="event",size="region") #hue+size

sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",hue="event",style="event",size="region") #hue+style+size

3.5 relplot分组绘图样式

hue分组可以用palette设置颜色样式
style分组可以用markers设置点样式,用dashes设置线样式
size分组可以用sizes设置线粗细

import matplotlib.pyplot as plt
import seaborn as sns
fmri=sns.load_dataset('fmri')sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",hue="region",palette="hsv") #颜色样式
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",style="region",markers=["o","*"]) #style点样式
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",style="region",dashes=[[5,1],[1,0]]) #style线样式
sns.relplot(data=fmri,x="timepoint",y="signal",kind="line",size="region",sizes=[0.5,2]) #size大小plt.show()

注意:

  1. dashes参数用列表时,列表长度必须和style分组个数相同。
  2. dashes线样式用[线长度,空白长度,线长度,空白长度,...]列表形式自定义线条样式

4. scatterplot散点图

scatterplot和使用relplot绘制散点图类似,主要区别:

  • 少了kind参数,以及row,col参数。
  • 多了个ax参数。
import matplotlib.pyplot as plt
import seaborn as sns
tips=sns.load_dataset('tips')sns.scatterplot(data=tips,x="total_bill",y="tip")plt.show()

因为scatterplot是axes级函数

  • 返回值是一个axes
  • 可以用ax指定axes。
    • 不指定ax时,会在默认的axes中绘图。
    • 不指定ax,多次调用scatterplot绘图都会在默认(同一个)的axes中绘图。
import matplotlib.pyplot as plt
import seaborn as sns
tips=sns.load_dataset('tips')
fig=plt.figure()
ax1=fig.add_subplot(121)
ax2=fig.add_subplot(122)
#ax1,ax2=fig.subplots(1,2)sns.scatterplot(data=tips,x="total_bill",y="tip",hue='smoker',ax=ax1)
sns.scatterplot(data=tips,x="total_bill",y="tip",hue='smoker',size='sex',ax=ax2)plt.show()

5. lineplot折线图

lineplot和使用relplot绘制折线图类似,主要区别:

  • 少了kind参数,以及row,col参数。
  • 多了个ax参数。
import matplotlib.pyplot as plt
import seaborn as sns
fmri=sns.load_dataset('fmri')sns.lineplot(data=fmri,x="timepoint",y="signal")plt.show()

因为lineplot是axes级函数

  • 返回值是一个axes
  • 可以用ax指定axes。
    • 不指定ax时,会在默认的axes中绘图。
    • 不指定ax,多次调用lineplot绘图都会在默认(同一个)的axes中绘图。
import matplotlib.pyplot as plt
import seaborn as sns
fmri=sns.load_dataset('fmri')
fig=plt.figure()
(ax1,ax2),(ax3,ax4)=fig.subplots(2,2)sns.lineplot(data=fmri,x="timepoint",y="signal",ax=ax1)
sns.lineplot(data=fmri,x="timepoint",y="signal",hue='region',ax=ax2)
sns.lineplot(data=fmri,x="timepoint",y="signal",hue='region',style='event',ax=ax3)
sns.lineplot(data=fmri,x="timepoint",y="signal",hue='region',size='event',ax=ax4)plt.show()


Seaborn系列目录


个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。

修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap

未经允许请勿转载。

Seaborn系列(二):关系绘图相关推荐

  1. seaborn系列(1) | 关系类图relplot用法

    本篇是<Seaborn系列>文章的第1篇. 关系类图relplot 关系类图 函数原型 参数解读 案例教程 案例地址 关系类图 seaborn.relplot()解读 注意:数据一定是通过 ...

  2. Seaborn系列(三):分布统计绘图(distribution)

    Seaborn系列目录 文章目录 1. 分布统计绘图API概述 2. displot单变量分布图(直方图.核密度.累积分布) 2.1 displot函数绘制单变量分布图 2.2 displot直方图k ...

  3. seaborn系列 (2) | 散点图scatterplot()

    本篇是<Seaborn系列>文章的第2篇. 散点图 散点图 scatterplot 函数原型 参数解读 案例教程 案例地址 散点图 scatterplot seaborn.scatterp ...

  4. 11、【易混淆概念集】-第六章2 紧前关系绘图法 排列活动 敏捷发布规划 组织程序链接 依附性活动 提前量与滞后量

    本讲主要介绍PMBOK第六章中的重要知识点,帮助你进一步理解. 本节目录 一.紧前关系绘图法 二.排列活动 三.敏捷发布规划 四.组织程序链接 五.依附性活动 六.提前量与滞后量 一.紧前关系绘图法 ...

  5. 人工智能-seaborn单双多变量绘图、两案例:NBA球员数据分析、北京租房数据统

    1. seaborn 作用:更高效地绘图 #安装 pip3 install seaborn#导入 import seaborn as sns 单变量:直方图或核密度曲线 双变量:散点图.二维直方图. ...

  6. 《CDN 之我见》系列二:原理篇(缓存、安全)

    2019独角兽企业重金招聘Python工程师标准>>> <CDN之我见>共由三个篇章组成,分为原理篇.详解篇和陨坑篇.本篇章适合那些从未接触过.或仅了解一些 CDN 专业 ...

  7. seaborn系列 (4) | 分类图catplot()

    分类图 分类图 函数原型 参数解读 案例教程 案例地址 本篇是<Seaborn系列>文章的第4篇-分类图. 分类图 分类图catplot() 解析: catplot() 分类图(它是下面8 ...

  8. 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程

    机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...

  9. 微服务架构系列二:密码强度评测的实现与实验

    本文是继<微服务架构系列一:关键技术与原理研究>的后续,系列一中论述了微服务研究的背景和意义,主要调研了传统架构的发展以及存在的问题和微服务架构的由来,然后针对微服务架构的设计原则.容器技 ...

  10. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

最新文章

  1. PCB多层线路板打样难点
  2. Open Images冠军,商汤提出解偶检测分支新方法TSD并入选CVPR 2020
  3. es6箭头函数_ES6语法之-箭头函数
  4. Oracle 11.2.0.4下载地址
  5. 网站开发技巧参考大全转
  6. java对象间的转型,详细讲述Java中的对象转型
  7. vscode debug c++与opencv程序
  8. java 数组 存储_Java-将数组存储到内存或从内存上传到磁盘
  9. Extract Any Audio Pro for Mac - mp3格式转换器
  10. 机器学习数学知识积累总结
  11. H.264RTP封包原理
  12. 浅谈软件开发的四大要素
  13. php繁体类,PHP类UTF8编码内的繁简转换-繁体-简体
  14. 记一次Mac挖矿病毒的处置
  15. 不看后悔!圈内老手总结的18条嵌入式 C 实战经验
  16. 硬盘数据恢复原理与方法(一)
  17. CSGO 增加机器人数量上限
  18. The requested resource is not available.
  19. 通过网页来打开app指定页面
  20. 微信小程序----引入外部字体库iconfont的图标

热门文章

  1. 小白应该如何选择国内服务器?腾讯云、阿里云、小鸟云?
  2. XPDL与WS-BPEL的比较之五:形势与未来
  3. workman与php通信
  4. 中国这10家慕课网站,您需要知道
  5. 【Tpshop商城使用】
  6. 树莓派自动饮水机编程示例
  7. 调整SumatraPDF暗黑模式
  8. 中国各省存贷款余额(2003-2020年)
  9. Kaggle泰坦尼克号预测——Last
  10. 解决挖矿程序(imWBR1,ddg)步骤