在公众号「python风控模型」里回复关键字:学习资料

用分类数据绘图¶

在关系图教程中,我们看到了如何使用不同的视觉表示来显示数据集中多个变量之间的关系。在示例中,我们关注主要关系在两个数值变量之间的情况。如果主要变量之一是“分类的”(分为离散组),则使用更专业的可视化方法可能会有所帮助。

在 seaborn 中,有几种不同的方式来可视化涉及分类数据的关系。以之间的关系类似relplot(),要么scatterplot()或者lineplot(),有两种方法可以让这些地块。有许多轴级函数用于以不同方式绘制分类数据,还有一个图形级界面catplot(),可提供对它们的统一更高级别访问。

将不同的分类情节类型视为属于三个不同的系列会很有帮助,我们将在下面详细讨论。他们是:

分类散点图:

stripplot()(使用kind="strip"; 默认值)

swarmplot()(与kind="swarm"

分类分布图:

boxplot()(与kind="box"

violinplot()(与kind="violin"

boxenplot()(与kind="boxen"

分类估计图:

  • pointplot()(与kind="point"

  • barplot()(与kind="bar"

  • countplot()(与kind="count"

这些系列使用不同的粒度级别表示数据。在决定使用哪个时,您必须考虑要回答的问题。统一的 API 使您可以轻松地在不同类型之间切换并从多个角度查看您的数据。

在本教程中,我们将主要关注图形级界面,catplot(). 请记住,此函数是上述每个函数的高级接口,因此我们将在显示每种绘图时引用它们,并保留更详细的特定于类型的 API 文档。

import seaborn as snsimport matplotlib.pyplot as pltsns.set_theme(style="ticks", color_codes=True)

分类散点图¶

中数据的默认表示catplot()使用散点图。seaborn 中实际上有两种不同的分类散点图。他们采用不同的方法来解决用散点图表示分类数据的主要挑战,即属于一个类别的所有点将落在对应于分类变量的轴上的相同位置。使用的方法stripplot(),它是中的默认“种类”,catplot()是通过少量随机“抖动”调整分类轴上点的位置:

tips = sns.load_dataset("tips")sns.catplot(x="day", y="total_bill", data=tips)

jitter参数控制抖动的幅度或完全禁用它:

sns.catplot(x="day", y="total_bill", jitter=False, data=tips)

第二种方法使用防止它们重叠的算法沿分类轴调整点。它可以更好地表示观察的分布,尽管它只适用于相对较小的数据集。这种情节有时被称为“蜂群”,是在 seaborn by 中绘制的swarmplot(),通过设置kind="swarm"in激活catplot()

sns.catplot(x="day", y="total_bill", kind="swarm", data=tips)

与关系图类似,可以通过使用hue语义向分类图添加另一个维度。(分类图目前不支持sizestyle语义)。每个不同的分类绘图函数以hue不同的方式处理语义。对于散点图,只需要改变点的颜色:

sns.catplot(x="day", y="total_bill", hue="sex", kind="swarm", data=tips)

与数值数据不同,如何沿其轴对分类变量的级别进行排序并不总是很明显。通常,seaborn 分类绘图函数会尝试从数据中推断类别的顺序。如果您的数据具有 pandasCategorical数据类型,则可以在此处设置类别的默认顺序。如果传递给分类轴的变量看起来是数字,则将对级别进行排序。但数据仍被视为分类数据并绘制在分类轴上的序数位置(特别是在 0、1、…),即使使用数字来标记它们:

sns.catplot(x="size", y="total_bill", data=tips)

选择默认排序的另一个选项是采用出现在数据集中的类别级别。也可以使用order参数在特定于绘图的基础上控制排序。在同一个图中绘制多个分类图时,这很重要,我们将在下面看到更多:

sns.catplot(x="smoker", y="tip", order=["No", "Yes"], data=tips)

我们已经提到了“分类轴”的概念。在这些示例中,它始终对应于水平轴。但是将类别变量放在纵轴上通常会有所帮助(特别是当类别名称比较长或类别较多时)。为此,请交换对轴的变量分配:

sns.catplot(x="total_bill", y="day", hue="time", kind="swarm", data=tips)

类别内观察值的分布¶

随着数据集大小的增长,分类散点图在它们可以提供的关于每个类别中值分布的信息方面变得有限。发生这种情况时,可以采用多种方法来汇总分布信息,以便于跨类别级别进行轻松比较。

箱线图¶

第一个是熟悉的boxplot()。这种图显示了分布的三个四分位数和极值。“胡须”延伸到位于下四分位数和上四分位数 1.5 IQR 内的点,然后独立显示超出此范围的观测值。这意味着箱线图中的每个值都对应于数据中的一个实际观察值。

sns.catplot(x="day", y="total_bill", kind="box", data=tips)

添加hue语义时,语义变量每个级别的框沿分类轴移动,因此它们不会重叠:

sns.catplot(x="day", y="total_bill", hue="smoker", kind="box", data=tips)

这种行为被称为“躲避”,默认情况下是打开的,因为它假定语义变量嵌套在主分类变量中。如果不是这种情况,您可以禁用闪避:

tips["weekend"] = tips["day"].isin(["Sat", "Sun"])sns.catplot(x="day", y="total_bill", hue="weekend",            kind="box", dodge=False, data=tips)

相关函数boxenplot()绘制类似于箱线图但经过优化以显示有关分布形状的更多信息的图。它最适合更大的数据集:

diamonds = sns.load_dataset("diamonds")sns.catplot(x="color", y="price", kind="boxen",            data=diamonds.sort_values("color"))

小提琴图¶

一种不同的方法是 a violinplot(),它将箱线图与分布教程中描述的核密度估计过程相结合:

sns.catplot(x="total_bill", y="day", hue="sex",            kind="violin", data=tips)

这种方法使用核密度估计来提供对值分布的更丰富的描述。此外,箱线图中的四分位数和晶须值显示在小提琴内部。缺点是,由于 violinplot 使用 KDE,因此可能需要调整一些其他参数,相对于简单的箱线图增加了一些复杂性:

sns.catplot(x="total_bill", y="day", hue="sex",            kind="violin", bw=.15, cut=0,            data=tips)

当色调参数只有两个级别时,也可以“拆分”小提琴,这样可以更有效地利用空间:

sns.catplot(x="day", y="total_bill", hue="sex",            kind="violin", split=True, data=tips)

最后,在小提琴内部绘制的图有几个选项,包括显示每个单独观察而不是汇总箱线图值的方法:

sns.catplot(x="day", y="total_bill", hue="sex",            kind="violin", inner="stick", split=True,            palette="pastel", data=tips)

结合swarmplot()striplot()与箱线图或小提琴图一起显示每个观察结果以及分布摘要也很有用:

g = sns.catplot(x="day", y="total_bill", kind="violin", inner=None, data=tips)sns.swarmplot(x="day", y="total_bill", color="k", size=3, data=tips, ax=g.ax)

类别内的统计估计¶

对于其他应用程序,您可能希望显示值集中趋势的估计值,而不是显示每个类别内的分布。Seaborn 有两种主要方式来显示这些信息。重要的是,这些函数的基本 API 与上面讨论的那些相同。

条形图¶

实现这一目标的一种熟悉的情节风格是条形图。在 seaborn 中,该barplot()函数对完整数据集进行操作并应用一个函数来获得估计值(默认取平均值)。当每个类别中有多个观测值时,它还使用自举法计算估计值的置信区间,该区间使用误差线绘制:

titanic = sns.load_dataset("titanic")sns.catplot(x="sex", y="survived", hue="class", kind="bar", data=titanic)

条形图的一个特例是当您想要显示每个类别中的观察数而不是计算第二个变量的统计量时。这类似于分类变量而非定量变量的直方图。在 seaborn 中,使用countplot()函数很容易做到这一点:

sns.catplot(x="deck", kind="count", palette="ch:.25", data=titanic)

barplot()countplot()可以被调用以所有的选项上面所讨论的,与他人被每个功能的详细文档中所示沿着:

sns.catplot(y="deck", hue="class", kind="count",            palette="pastel", edgecolor=".6",            data=titanic)

点图¶

pointplot()函数提供了一种用于可视化相同信息的替代样式。此函数还使用另一个轴上的高度对估计值进行编码,但不是显示完整的条形图,而是绘制点估计值和置信区间。此外,pointplot()连接来自同一hue类别的点。这可以很容易地看出主要关系是如何作为色调语义的函数而变化的,因为你的眼睛非常擅长观察斜率的差异:

sns.catplot(x="sex", y="survived", hue="class", kind="point", data=titanic)

虽然分类函数缺乏style关系函数的语义,但改变标记和/或线型以及色调以使图形最易于访问并在黑白中重现良好仍然是一个好主意:

sns.catplot(x="class", y="survived", hue="sex",            palette={"male": "g", "female": "m"},            markers=["^", "o"], linestyles=["-", "--"],            kind="point", data=titanic)

绘制“宽格式”数据¶

虽然首选使用“长格式”或“整洁”数据,但这些函数也可以应用于各种格式的“宽格式”数据,包括 Pandas DataFrames 或二维 numpy 数组。这些对象应该直接传递给data参数:

iris = sns.load_dataset("iris")sns.catplot(data=iris, orient="h", kind="box")

此外,轴级函数接受 Pandas 或 numpy 对象的向量,而不是 a 中的变量DataFrame

sns.violinplot(x=iris.species, y=iris.sepal_length)

要控制由上述函数绘制的图形的大小和形状,您必须使用 matplotlib 命令自己设置图形:

f, ax = plt.subplots(figsize=(7, 3))sns.countplot(y="deck", data=titanic, color="c")

当您需要一个分类图形与其他类型的图在更复杂的图形中愉快地共存时,这是您应该采用的方法。

显示多个方面的关系¶

就像relplot()catplot()建立在一个事实之上FacetGrid意味着很容易添加分面变量来可视化更高维的关系:

sns.catplot(x="day", y="total_bill", hue="smoker",            col="time", aspect=.7,            kind="swarm", data=tips)

为了进一步自定义绘图,您可以使用FacetGrid它返回的对象上的方法:

g = sns.catplot(x="fare", y="survived", row="class",                kind="box", orient="h", height=1.5, aspect=4,                data=titanic.query("fare > 0"))g.set(xscale="log")

catplot-用分类数据绘图就为大家介绍到这里,欢迎各位同学报名
《呆瓜半小时入门python数据分析》,学习更多相关知识

Seaborn可视化 -- 分类统计图seaborn.catplot相关推荐

  1. Python数据可视化seaborn(五) -- 分类统计图

    分类数据可视化 - 统计图 barplot() / countplot() / pointplot() import numpy as np import pandas as pd import ma ...

  2. pandas数据预处理(字段筛选、query函数进行数据筛选、缺失值删除)、seaborn可视化分面图(facet)、seaborn使用Catplot可视化分面箱图(Faceted Boxplot)

    pandas数据预处理(字段筛选.query函数进行数据筛选.缺失值删除).seaborn可视化分面图(facet).seaborn使用Catplot可视化分面箱图(Faceted Boxplot) ...

  3. seaborn可视化多水平分类变量分组箱图boxplot并自定义多个箱体的顺序(Manually Order Boxes in Boxplot with Seaborn)

    seaborn可视化多水平分类变量分组箱图boxplot并自定义多个箱体的顺序(Manually Order Boxes in Boxplot with Seaborn) 目录

  4. Python数据分析28——seaborn可视化(四)之箱线图和分类柱状图

    准备工作 先导入相关模块和数据集. import numpy as np import pandas as pd from pandas import Series, DataFrame import ...

  5. seaborn 教程_使用Seaborn进行数据可视化教程

    seaborn 教程 "Seaborn makes the exploratory data analysis phase of your data science project beau ...

  6. seaborn可视化01,涵盖几乎所有用法

    seaborn可视化(一) Matplotlib试着让简单的事情更加简单,困难的事情变得可能,而Seaborn就是让困难的东西更加简单. seaborn是针对统计绘图的,一般来说,seaborn能满足 ...

  7. matplotlib 均值_干货|教你一文掌握:Matplotlib+Seaborn可视化

    转自:Python数据分析实战与AI干货 导语 Seaborn和Matplotlib是Python最强大的两个可视化库.Seaborn其默认主题让人惊讶,而Matplotlib可以通过其多个分类为用户 ...

  8. python的seaborn用于可视化分析_Python数据分析-可视化“大佬”之Seaborn

    如果有想关注Java开发相关的内容,可以转 上次学习了如何使用Matplolib进行数据可视化,接下来让我们来看看另一个可视化工具--seaborn Seaborn 既然有了matplotlib,那为 ...

  9. python数据可视化(matplotlib,seaborn,plotly)

    文章目录 资料链接 Matplotlib绘图基础 简单图形绘制 1.饼图 2.条形图 3.直方图 4.散点图 图形基本设置 统计图形实战 1.柱状图(堆积柱状图) 2.直方图(直方图,核密度图,正态分 ...

  10. Python数据可视化三部曲之 Seaborn 从上手到上头

      Python数据可视化三部曲之 Seaborn 从上手到上头 文章目录 1. 安装 seaborn 2.准备数据 3.背景与边框 3.1 设置背景风格 3.3 其他 3.2 边框控制 4. 绘制 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续8)
  2. 双一流博士导师整理:最新的计算机视觉学习路线(含时间分配建议)
  3. 【机器学习】如果你不了解机器学习的简史,请看这篇文章
  4. getexternalfilesdir 相册_音乐相册(电子相册制作)V5.2 安卓最新版
  5. multipartfile 获取音频时长_抖音音频下载捷径:一键提取音频,安卓+ios全通用,完全免费...
  6. DataFountain新上两项CV算法竞赛(文化传承——汉字书法多场景识别、大数据医疗——肝癌影像AI诊断)——50万巨奖等你来拿!
  7. tomcat内存溢出(修改catalina.bat后windows启动tomcat服务没有效果) | 王猛的个人主页...
  8. Web后端学习笔记 Flask(10)CSRF攻击原理
  9. java 扫描包框架_java – 在Android中实现类似Spring的包扫描
  10. JAVA面向对象OOP→继承extends、构造方法super、方法重写override、样例代码
  11. js sdk demo java_微信JS-SDK DEMO页面和示例代码
  12. css3优惠卷上方锯齿_CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
  13. 计算机t恤,PS一分钟技巧!给T恤加个图案竟然这么简单
  14. 云服务器哪家好?国内云服务器十大品牌排行榜
  15. 实现上下拉刷新MJRefresh
  16. win10解决电脑突然复制粘贴失效问题
  17. c语言贪吃蛇代码(菜单功能后续补充)
  18. C++基于libxls库读取xls文件
  19. 拷机测试需要多久_如何科学理解麒麟9000的拷机功耗?
  20. 【LeetCode】初级算法:数组

热门文章

  1. oracle最新时间查询,Oracle的日期时间范围查询
  2. js实现kmp算法_数据结构作业之完整KMP算法实现通讯录
  3. 基于 nacos 部署 springcloud jar 包,报错 org.yaml.snakeyaml.error.YAMLException
  4. 什么是Prettier?
  5. oracle10g配置tns,连接Oracle 10g时ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的SID...
  6. 捕鱼达人python游戏项目,少儿编程体验课程项目,源码免费分享,内置详细注释,可更改游戏参数;关注获取更多资源
  7. 2 VUE.js 内部指令
  8. 转:js中arguments详解
  9. [C++]面向对象部分——类
  10. 文件打印服务器解决方案