本文介绍基于Pythonseaborn模块,实现联合分布图绘制的方法。

  联合分布Joint Distribution)图是一种查看两个或两个以上变量之间两两相互关系的可视化图,在数据分析操作中经常需要用到。一幅好看的联合分布图可以使得我们的数据分析更加具有可视性,让大家眼前一亮。

  那么,本文就将用seaborn来实现联合分布图的绘制。seaborn是一个基于matplotlibPython数据可视化模块,借助于其,我们可以通过较为简单的操作,绘制出各类动人的图片。

  首先,引入需要的模块。

import pandas as pd
import seaborn as sns

  接下来,将存储有我们需要绘制联合分布图数据的文件导入。因为我是将数据存储于.csv文件,所以我这里用pd.read_csv来实现数据的导入。我的数据在.csv文件中长如下图的样子,其中共有107行,包括106行样本加1行列标题;以及10列。我们就看前几行即可:

  导入数据的代码如下:

data_path="G:/black_carbon_paper/97_BC20201230/00_Original/AllData5Factor.csv"
column_names=['FID','ID','X','Y','BC','Temp','Slope','RoDen','POI','GAIA'] my_data=pd.read_csv(data_path,names=column_names,header=0)

  其中,data_path.csv文件存储位置与文件名,column_names是导入的数据在Python中我希望其显示的名字(为什么原始数据本来就有列标题但还要再设置这个column_names,本文下方有介绍);header=0表示.csv文件中的0行(也就是我们一般而言的第一行)是列标题;如果大家的初始数据没有列标题,即其中的第一行就是数据自身,那么就需要设置header=None

  执行上述代码,我们将导入的数据打印,看看在Python中其长什么样子。

print(my_data)

  可以看到,导入Python后数据的第7列,原本叫做Slope_1,但是设置我们自己命名的column_names后,其就将原本数据的列标题改为我们自己设定的标题Slope了。如果我们不设置column_names,导入的数据就是这个样子:

  可以看到,我们不用column_names的话,数据导入Python后列名就是原始的Slope_1

  我们继续。其实用seaborn绘制联合分布图非常简单(这就是seabornmatplotlib改进,让我们绘制复杂的图时候不需要太麻烦),仅仅只有一下两句代码:

joint_columns=['BC','Temp','Slope','RoDen','POI','GAIA']

sns.pairplot(my_data[joint_columns],kind='reg',diag_kind='kde')

  其中,第一句是定义我们想要参与绘制联合分布图的列,将需要绘图的列标题放入joint_column。可以看到,因为我的数据中,具有ID这种编号列,而肯定编号是不需要参与绘图的,那么我们就不将其放入joint_column即可。

  第二句就是绘图。kind表示联合分布图中非对角线图的类型,可选'reg''scatter''kde''hist''reg'代表在图片中加入一条拟合直线,'scatter'就是不加入这条直线,'kde'是等高线的形式,'hist'就是类似于栅格地图的形式;diag_kind表示联合分布图中对角线图的类型,可选'hist''kde''hist'代表直方图,'kde'代表直方图曲线化。

  以kinddiag_kind分别选择'reg''kde'为例,绘图结果如下:

  以kinddiag_kind分别选择'scatter''hist'为例,绘图结果如下:

  个人感觉第一幅图好看些~

  不过,由于参与绘图的变量个数比较多,因此使得图中的字体有点看不清。可以加上一句代码在sns.pairplot这句代码的上面:

sns.set(font_scale=1.2)

  其中,font_scale就是字体的大小,后面的数字越大,字体就越大。以font_scale=1.2为例,让我们看看效果:

  这样子字体就大了~

多变量两两相互关系联合分布图的Python绘制的更多相关文章

  1. 在db2中 两个数据库之间的两个表的联合查询

    大家好,今天遇到了在db2中 两个数据库之间的两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理我找了类似于比如两个数据库: db1,db2用户名密码s ...

  2. POJ 1269 Intersecting Lines(判断两直线位置关系)

    题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...

  3. H.264中NAL、Slice与frame意思及相互关系

    H.264中NAL.Slice与frame意思及相互关系 NAL nal_unit_type中的1(非IDR图像的编码条带).2(编码条带数据分割块A).3(编码条带数据分割块B).4(编码条带数据分 ...

  4. [LeetCode] Couples Holding Hands 两两握手

    N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...

  5. 斯坦福大学公开课机器学习: advice for applying machine learning | regularization and bais/variance(机器学习中方差和偏差如何相互影响、以及和算法的正则化之间的相互关系)

    算法正则化可以有效地防止过拟合, 但正则化跟算法的偏差和方差又有什么关系呢?下面主要讨论一下方差和偏差两者之间是如何相互影响的.以及和算法的正则化之间的相互关系 假如我们要对高阶的多项式进行拟合,为了 ...

  6. 两两组合覆盖测试用例设计工具:PICT

    两两组合覆盖测试用例设计工具:PICT 2016-08-31 目录 1 成对测试简介2 PICT使用  2.1 安装 PICT  2.2 使用PICT3 PICT算法  3.1 准备阶段  3.2 产 ...

  7. .Net 类型、对象、线程栈、托管堆运行时的相互关系

    JIT(just in time)编译器 接下来的会讲到方法的调用,这里先讲下JIT编译器.以CLR书中的代码为例(手打...).以Main方法为例: static void Main(){ Cons ...

  8. [LeetCode] 24. 两两交换链表中的节点

    题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是 ...

  9. [Swift]LeetCode24. 两两交换链表中的节点 | Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3 ...

  10. 两两交换链表中的节点(java实现)

    题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...

随机推荐

  1. JAVA系列之类加载机制详解

    类的加载机制 ? 双亲委派机制 ? 什么是类加载器 ? 自定义类加载器有哪些应用场景 ? 通常,在关于Java的类加载部分会遇到以上疑问,本文将对类加载重要部分做详细介绍,包括重要的基础概念和应用场景 ...

  2. .NET实现堆排序

    堆排序及相关知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序.首先简单了解下堆结构. 堆 堆是具 ...

  3. 关于 .NET 在不同操作系统中 IO 文件路径拼接方法结升级 .NET 7 后注意到的一个小坑

    .NET 现在支持跨平台这件事情已经是众所周知的特点了,虽然平台整体支持跨平台了,但是我们的代码如果真的想要实现跨平台运行其实还是有些小细节要注意的,今天想要记录分享的就是关于 文件I/O操作时路径的 ...

  4. win 10 玩红警/黑边,不能全屏,闪退

    win 10玩红警黑边问题 1.下载ddraw.dll,放在游戏目录 下载链接:ddraw.dll 如果提示 选择保留就行了 2.Win 键+S键,搜索注册表,打开这个 进去按这个路径    计算机\ ...

  5. 微服务---Dubbo+Zookeeper

    dubboAdmin客户端 --监控 && 启动 Zookeeper 客户端 --注册中心 生产者: <?xml version="1.0" encoding ...

  6. 自动注册实体类到EntityFramework Core上下文,并适配ABP及ABP VNext

    继上篇文章(EF Core懒人小技巧之拒绝DbSet)之后,最近笔者把这个小功能单独封装成一个扩展方法并开源,欢迎交流和Star~ GitHub: EntityFrameworkCore.Extens ...

  7. tesseract-orc训练 结合python3图像识别验证码

    ##前言 其实就是用到tesseract-ocr这个引擎来识别,只不过我们需要做一些在此之前的工作 将图片用pillow进行初步处理,将图片中的验证码显示的清晰一些,关于这些教程可以查看我的另一篇文章 ...

  8. 【大数据面试】Flink 03-窗口、时间语义和水印、ProcessFunction底层API

    三.窗口 1.窗口的介绍 (1)含义 将无限的流式数据切割为有限块处理,以便于聚合等操作 (2)图解 2.窗口的分类 (1)按性质分 Flink 支持三种划分窗口的方式,time.count和会话窗口 ...

  9. 【每日一题】【初始节点初始化,前一个为空】2022年1月7日-NC78 反转链表

    描述给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头. 数据范围: n\leq1000n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) . 如当 ...

  10. 5V升压8.4V,5V转8.4芯片电路图

    PW5300是电流模式升压DC-DC转换器.其内置0.2Ω功率MOSFET的PWM电路使该稳压器具有效高的功率效率.内部补偿网络还可以程度地减少了6个外部元件的数量.误差放大器的同相输入接到0.6V精 ...