Seaborn——绘制统计图形

文章目录

  • 可视化数据的分布
    • 绘制单变量分布
    • 绘制双变量分布
    • 绘制成对的双变量分布
  • 用分类数据绘图
    • 类别散点图
      • 通过stripplot()函数画散点图
      • swarmplot()函数
    • 类别内的数据分布
      • 绘制箱型图
      • 绘制提琴图
    • 类别内的统计估计
      • 绘制条形图
      • 绘制点图


可视化数据的分布

绘制单变量分布

一般采用最简单的直方图描述单变量的分布情况。Seaborn中提供了displot()函数。

distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None,
hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None,
color=None, vertical=False, norm_hist=False, axlabel=None,
label=None, ax=None)

上述函数中常用的参数含义如下:

  1. a:表示要观察的数据,可以是Sries、一维数组或列表
  2. bins:用于控制条形的数量
  3. hist:接收布尔类型,表示是否绘制(标注)直方图
  4. kde:接收布尔类型,表示是否绘制高斯核密度估计曲线
  5. rug:接收布尔类型,表示是否在支持的轴的方向上绘制rugplot

通过distplot()函数绘制直方图:

import seaborn as sns
import numpy as npsns.set()  # 显式调用set()获取默认绘图
np.random.seed(0)  # 确定随机数生成器的种子
arr = np.random.randn(100)  # 生成随机数组
ax = sns.distplot(arr, bins=10)  # 绘制直方图

输出结果:
在这里插入图片描述

由图可得,直方图共有10个条柱,每个条柱的颜色为蓝色,并且拥有核密度估计曲线。核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,可以比较直观地看出数据样本本身的分布特征。


如果想要仅拥有核密度估计曲线,设置相关参数即可:

arr_random = np.random.randint(0, 100, 500)  # 绘制包含500个位于[0, 100)之间的随机整数数组
sns. distplot(arr_random, hist=False, rug=True)  # 绘制核密度估计曲线

输出结果:

绘制一条核密度估计曲线,并且在x轴的上方生成了观测数值的小细条。
在这里插入图片描述

注意:如果希望Seaborn用Matplotlib的默认样式,之前可以通过从Seaborn库中导入apionly模块解决这个问题,但是从2017年7月起这个方法已经被弃用了。因此,现在导入Seaborn时,需要显式地调用set()或set_style()、set_context()和set_palette()中的一个或多个函数,以获取Seaborn或者Matplotlib默认的绘图样式。

拟合并绘制核密度估计曲线还可以使用kedeplot()函数


绘制双变量分布

两个变量的二元分布可视化可以显示两个变量之间的双变量关系以及每个变量在单独坐标轴上的单变量分布。

jointplot(x, y, data=None, kind=“scatter”, stat_func=None,
color=None, height=6, ratio=5, space=.2,
dropna=True, xlim=None, ylim=None,
joint_kws=None, marginal_kws=None, annot_kws=None, **kwargs)

上述函数中常用参数的含义如下:

  1. kind:表示绘制图形的类型
  2. stat_func:用于计算有关关系的统计量并标注图
  3. size:用于设置图的大小(正方形)
  4. ratio:表示中心图与侧边图的比例。该参数的值越大,则中心图的占比会越大。
  5. space:用于设置中心图与侧边图的间隔大小。
  6. xlim,ylim:表示x、y轴的范围。

绘制散点图:

dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})  # 创建DataFrame对象
sns.jointplot(x="x", y='y', data=dataframe_obj)  # 绘制散点图

输出结果:

x轴的名称为“x”,y轴的名称为“y”,两轴的数据均为500个随机数。可以看到的是散点图的上方和右侧增加了直方图,便于观察x和y轴数据的整体分布情况,并且它们的均值都是0。
在这里插入图片描述


绘制二维直方图:

dataframe_obj = pd.DataFrame({"x": np.random.randn(500),"y": np.random.randn(500)})  # 创建DataFrame对象
sns.jointplot(kind='hex', data=dataframe_obj, x='x', y='y')  # 绘制二维直方图

输出结果:

从六边形颜色的深浅,可以观察到数据密集的程度,图形的上方和右侧依然给出了直方图。

注意: 绘制二维直方图时最好是用白色背景以便观察六边形颜色深浅。
在这里插入图片描述


绘制核密度估计图形:

利用核密度估计同样可以查看二元分布,Seaborn中用等高线图来表示。

sns.jointplot(kind='kde', x='x', y='y', data=dataframe_obj)  # 绘制核密度估计图形

输出结果:

绘制了核密度的等高线图,通过观察等高线的颜色深浅,可以看出哪个范围的数值分布的最多,哪个范围的数值分布的最少。同样的,在图形的上方和右侧给出了核密度曲线图。
在这里插入图片描述


绘制成对的双变量分布

要想在数据集中绘制成对的双变量分布,则可以使用pairplot()函数实现,该函数会创建一个坐标轴矩阵,并显示DataFrame对象中每对变量的关系。该函数亦可绘制每个变量在对角轴上的单变量分布。

代码如下:

通过load_dataset()函数加载了seaborn中内置的数据集,根据tips数据集绘制多个双变量分布。【如无法正确运行,则在这里下载zip文件,然后在电脑中,使用搜索功能找到seaborn-data文件夹,将zip文件解压到文件夹中,具体步骤如下图:】
在这里插入图片描述

在这里插入图片描述

dataset = sns.load_dataset("tips")  # 加载seaborn中的数据集
sns.pairplot(dataset)  # 绘制多个成对的双变量分布

输出结果:
在这里插入图片描述


用分类数据绘图

类别散点图

stripplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
jitter=True, dodge=False, orient=None, color=None, palette=None,
size=5, edgecolor=“gray”, linewidth=0, ax=None, **kwargs)

上述函数中常用参数如下:

  1. x,y,hue:用于绘制长葛市数据的输入。
  2. data:用于绘制的数据集。如果x和y不存在,则它将作为宽格式,否则将作为长格式。
  3. order,hue_order:用于绘制分类的级别。
  4. jitteer:表示抖动的程度(仅沿类别轴)。当很多数据点重叠时,可以指定抖动的数量,或者设为True使用默认值。

通过stripplot()函数画散点图

代码如下:

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

输出结果:

从图中可以看出,图标横坐标时分类的数据,而且一些数据点会互相重叠,不易于观察。可以在调用stripplot()函数时传入jitter参数,以调整横坐标的位置。
在这里插入图片描述


改变横坐标的位置:

tips = sns.load_dataset("tips")
sns.stripplot(x='day', y='total_bill', data=tips, jitter=True)

输出结果:
在这里插入图片描述


swarmplot()函数

亦可使用swarmplot()函数绘制散点图,该函数的好处是所有的数据点都不会重叠,可以很清晰地观察到数据的分布情况。

代码如下:

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

输出结果:
在这里插入图片描述


类别内的数据分布

由于散点图查看各个分类中的数据分布不够直观,故可利用下列两种图形查看:

  1. 箱型图:直观地查看数据的四分位分布(1/4分位,中位数,3/4分位以及四分位距)
  2. 提琴图:箱型图与核密度图地的结合,可以展示任意位置的密度,可以很直观地看到哪些位置的密度较高

绘制箱型图

boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
orient=None, color=None, palette=None, saturation=.75,
width=.8, dodge=True, fliersize=5, linewidth=None,
whis=1.5, ax=None, **kwargs)

上述函数常用参数如下:

  1. orient:表示数据垂直或水平显示,取值为“v”|“h”
  2. palette:用于设置不同级别色相的颜色变量。
  3. saturation:用于设置数据显示的颜色饱和度。

代码如下:

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

输出结果:

x轴的名称为day,刻度范围是Thur ~ Sun(周四至周日),y轴的名称为total_bill,刻度范围为10 ~ 50左右。
在这里插入图片描述
从图中可以看出,Thur列、Fri列中大部分数据都小于30,但Thur列有5个异常值大于30、Fri列中有1个异常值大于40;Sat列中有3个大于40的异常值;Sun列中有两个大于40的异常值。


绘制提琴图

violinplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None,
bw=“scott”, cut=2, scale=“area”, scale_hue=True, gridsize=100,
width=.8, inner=“box”, split=False, dodge=True, orient=None,
linewidth=None, color=None, palette=None, saturation=.75,
ax=None, **kwargs)

代码如下:

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

输出结果:

由图可得,Thur列中位于5 ~ 25之间的数值较多,Fri列中位于5 ~ 30之间的数值较多,Sat列中位于5 ~ 35之间的数值较多,Sun列中位于5 ~ 40之间的数值较多。
在这里插入图片描述


类别内的统计估计

想要集中查看每个分类的集中趋势可以使用条形图和点图进行展示。

  1. barplot()函数:绘制条形图
  2. pointplot()函数:绘制点图。

绘制条形图

默认情况下, barplot()函数会在整个数据集上使用均值进行估计。若每个类别中有多个类别时(使用了hue参数),则条形图可以使用引导来计算估计的置信区间(样本统计量构造的总体参数的估计区间),并使用误差条来表示置信区间。

代码如下:

tips = sns.load_dataset("tips")
sns.barplot(x='day', y='total_bill', data=tips)  # 绘制条形图

输出结果:
在这里插入图片描述


绘制点图

该函数会用高度估计值对数据进行描述,而不是显示完整的条形,只绘制点估计和置信区间。

代码如下:

tips = sns.load_dataset("tips")
sns.pointplot(x='day', y='total_bill', data=tips)  # 绘制点图

输出结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bokeh——交互式可视化库

文章目录前言如何通过Plotting绘制图形前言 Bokeh是一个专门针对Web浏览器使用的交互式可视化库,这是与其他可视化库相比最核心的区别。 如何通过Plotting绘制图形 Plotting是以构建视觉符号为核心的接口,可以结合各种视觉元素(例如&#x…

指针、引用以及const限定符、constexpr限定符

文章目录复合类型引用概念与使用引用的定义注意指针概念声明方式取地址符指针值空指针利用指针访问对象赋值和指针void* 指针指向指针的指针指向指针的引用初始化所有指针有多重含义的某些符号const限定符概念const的引用指针和const顶层const和底层constconstexpr和常量表达式…

关键字typedef、关键字using、auto类型说明符和declytpe类型指示符

文章目录类型别名概念关键字 typedef别名声明 (alias declaration) using指针、常量和类型别名类型别名简化多维数组指针auto类型说明符概念复合类型、常量和autodecltype类型指示符概念decltype和引用类型别名 概念 有两种方法可用于定义类型别名。 关键字 typedef typede…

初始化、赋值、默认初始化、列表初始化、类内初始值、直接初始化与拷贝初始化

文章目录初始化和赋值的区别什么是默认初始化?列表初始化列表初始化的使用场景不适合使用列表初始化的场景类内初始值混用string对象和C风格字符串数组与vector对象关于vector对象两者间的初始化关系直接初始化与拷贝初始化初始化和赋值的区别 初始化的含义是创建变…

js动态增加,删除td,tr,table,div

js实现的动态添加,删除table内容: 截图如下: 1. 2. 源代码: main.css body {background-image: url(../images/qiantai/bg.png);font-family: arial;font-size: 12px;color: #d4d7da;text-align: center;background-repeat: r…

jQuery实现复选框的全选和反选:

jQuery实现复选框的全选和反选&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; index.jsp: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath…

C语言隐式/显式类型转换 | C++四种强制类型转换、类的隐式转换、explicit

文章目录C语言类型转换隐式类型转换显式类型转换C 强制类型转换static_castreinterpret_castconst_castdynamic_cast类的隐式类型转换概念只允许一步类类型转换explicit 抑制构造函数定义地隐式转换可以通过显式转换使用explicit构造函数C语言类型转换 隐式类型转换 编译器在…

函数重载、引用再探、内联函数

文章目录函数重载为什么C支持重载&#xff0c;C语言不支持呢&#xff1f;extern “C”引用再探引用的特性引用的使用场景引用和指针引用和指针的不同点:内联函数什么是内联函数&#xff1f;内联函数的特性内联函数的好处类的内联成员函数的声明内联函数的使用constexpr函数概念…

类的概念、成员函数的定义方式、类的访问控制和封装、类的大小、this指针

文章目录类的概念structclassclass和struct的区别是什么呢&#xff1f;类中成员函数的两种定义方式声明和定义都在类中声明和定义分离类的访问控制和封装类的封装特性类的大小结构体内存对齐规则类的存储方式this指针类的概念 在C中&#xff0c;类可以说是最重要的东西&#x…

jQuery实现两个列表框的值之间的互换:

jQuery实现两个列表框的值之间的互换&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();String basePath reque…

类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则

文章目录6个默认成员函数构造函数概念默认构造函数的类型默认实参概念默认实参的使用默认实参声明全局变量作为默认实参某些类不能依赖于编译器合成的默认构造函数第一个原因第二个原因第三个原因构造函数初始化构造函数里面的“”是初始化吗&#xff1f;为什么要使用列表初始化…

C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

文章目录构造函数再探以下代码共调用多少次拷贝构造函数委托构造函数概念形式匿名对象友元友元的声明友元类令成员函数作为友元函数重载和友元注意内部类特性类的const成员可变数据成员类的static成员概念关于static静态成员的类内初始化静态成员能用于某些普通成员不能的场景构…

顺序容器(vector、list、string、deque、forward_list)及迭代器、容器适配器

文章目录概述所有容器都支持的操作迭代器迭代器支持的操作迭代器支持的算术运算容器类型size_typeiterator 和 const_iterator容器定义和初始化拷贝初始化顺序容器独有的构造函数&#xff08;array除外&#xff09;array的初始化与内置数组类型的区别6种初始化方法&#xff08;…

jQuery实现表格隔行换颜色:

jQuery实现表格各行换颜色&#xff1a; 截图如下&#xff1a; 代码如下&#xff1a; <span style"font-family:Microsoft YaHei;font-size:14px;"><% page language"java" import"java.util.*" pageEncoding"UTF-8"%> &…

用stack处理中缀表达式【+、-、*、/、()】

文章目录题目描述思路使用getline()存储输入的字符串边读取边压栈完整代码题目描述 使用stack处理括号化的表达式。当你看到一个左括号&#xff0c;将其记录下来。当你在一个左括号之后看到一个右括号&#xff0c;从stack中pop对象&#xff0c;直至遇到左括号&#xff0c;将左括…

二维数组的查找

文章目录题目描述思路注意代码题目描述 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数…

Springmvc,Spring MVC文件上传

Springmvc文件上传&#xff1a; 1.代码截图如下&#xff1a; 2.UploadController.java: package cn.csdn.controller;import java.io.File;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller; import org.springframework.ui.…

插入迭代器、流迭代器、反向迭代器、移动迭代器

文章目录前言插入迭代器inserterfront_inserterback_inserteriostream迭代器istream_iterator 读取输入流istream_iterator允许使用懒惰求值ostream_iterator操作反向迭代器reverse_iterator的base成员函数前言 除了为每个容器定义的迭代器之外&#xff0c;标准库在头文件iter…

泛型算法(lambda表达式、function类模板、bind函数适配器、迭代器类别、链表数据结构独有的算法)

文章目录概念find()函数迭代器令算法不依赖于容器但算法依赖于元素类型的操作算法永远不会执行容器的操作只读算法accumulate()函数从两个序列中读取元素&#xff08;equal函数为例&#xff09;迭代器作为参数形成两个序列equal()写容器元素的算法概念fill()fill_n()插入迭代器…

jsp,div 限制字数,超出部分用省略号代替

1.我是用struts2标签做的&#xff1a;如下&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <% taglib prefix"s" uri"/struts-tags"%> <%String path request.getContext…