文章目录

  • 一、序言
  • 二、实战演示
    • 1. 直方图
    • 2. 箱型图和小提琴图
    • 3. 散点图
  • 三、结语

一、序言

随着各种组学技术的发展,一个样本可能对应成千上万个变量,现阶段研究往往是实践先于理论,通过层层特征筛选,得到少数可能和结局有关的变量,然后再去研究这些变量具体的含义。其中变量间的相互的关系也是研究的一个内容。通过肉眼直接分析原始的数据不太可能能看出变量间的关系,因此往往需要借助图像,以更直观地方式展现变量的分布情况。

二、实战演示

假设经过前期研究,得到了500个数据的两个变量 n, r,,没有任何关于它们对应的总体的信息。现在需要分析这两个变量间的关系
画图前,先选个好看点的预设图像风格:

import matplotlib.pyplot as plt
plt.style.use('ggplot')

1. 直方图

对于一组数据,统计描述的第一步是绘制频数直方图,在matplotlib中,使用hist()函数来绘制。几个关键的参数是:
x: 原始数据的sequence,可输入的数据类型为列表(list)、元组(tuple)、pandas序列(series)、numpy数组(array)等
bins: 箱,当输入值为整数时,表示需要绘制的频数直方图的组数;当输入为一个sequence时,表示定义的每组的界值,如输入[1, 2, 3 ,4]表示分成三组,[1, 2)、[2, 3)、[3, 4]
range: 用于设定bins的左侧边界和右侧边界,例如bins = 3, range = (1,4),则产生三组,每组界值为[1, 2)、[2, 3)、[3, 4];当bins输入为sequence时,这条指令无效。
density: 默认为False,如果设置为True,则绘制频率密度直方图。

fig, ax = plt.subplots()
ax.hist(n, bins = 18, range = (-50, 40), label = 'unknown distribution1')
ax.hist(r, bins = 18, range = (-50, 40), label = 'unknown distribution2', alpha = 0.8)
ax.legend()
plt.show()


然而直方图并不能看出这两个特征有什么关系,因此接下来选择直方图的升级版

2. 箱型图和小提琴图

https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.boxplot.html

     Q1-1.5IQR   Q1   median  Q3   Q3+1.5IQR|-----:-----|o      |--------|     :     |--------|    o  o|-----:-----|
flier             <----------->            fliersIQR

一个箱型图大概长这样,每一条线是和百分位数有关,flier表示离群值或者异常值。
小提琴图就相当于把直方图旋转90°在取对称。
在matplotlib中,boxplot()用于绘制箱型图,violinplot()用于绘制小提琴图。

violins = ax.violinplot((n, r), showmeans = False, showextrema = False, showmedians = False)
for violin in violins['bodies']:violin.set_edgecolor('black')violin.set_alpha(1)boxes = ax.boxplot((n, r), positions = (1,2), patch_artist = True, medianprops = {'linestyle':'--', 'color':'black'})
ax.set_xticklabels(labels = ['normal\ndistribution', 'unknown\ndistribution'])
ax.grid(axis = 'x')
plt.show()


直方图的升级版也并不能看出这两个特征有什么关系

3. 散点图

每个样本的这两个特征是相互匹配的,因此以n为x轴,r为y轴,绘制的点就代表每一个样本。
在matplotlib中,用scatter()绘制散点图

ax.scatter(n, r)
ax.set_xlabel('n')
ax.set_ylabel('r')
plt.show()


豁然开朗,原来这两个变量是呈现强的线性关系,使用直线回归验证我们的观点

from scipy.stats import linregress
statistics = linregress(n,r)
print(statistics)
'''
LinregressResult(
slope=0.9748791206336714,
intercept=-14.490971785425117,
rvalue=0.8537217995118889,
pvalue=3.1209429808110146e-143,
stderr=0.026645986874802068,
intercept_stderr=0.3018466146896383
)
'''

可以看出,相关系数r为0.854,p为10的-143次方基本上等于0,表现出很强的相关性。那么到底n和r是什么分布呢?

import numpy as np
np.random.seed(1)
n = np.random.normal(5, 10, 500)
r = n - np.random.randint(5, 25, 500)

其实n是一个均数为5,标准差为10的正态分布,而r是n随机减掉5-25之间的一个值得到的。在直线回归结果中可以看到,斜率为0.975,相当于1;截距为-14.491,正好在-25和-5的中位数附近。结果和r的推导式基本一样。

三、结语

最原始的最简单,散点图通过把每个样本的值都画出来,能很直观地看出变量的关系。

Python - matplotlib - 如何探索两个变量间关系?相关推荐

  1. python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...

    在Python 中同一个类两个函数间变量的调用方法 更新时间:2019年01月31日 15:44:54 作者:wxy_summer 今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调 ...

  2. python判断字符串相等_如何在python语言中判断两个变量或字符串相等

    在python语言中,判断两个变量是否相等或一致,除了使用==之外,还是可以使用is来判断.is和==作用是一致的,但是还有个判断不一致,就是使用is not.下面利用几个实例说明==和is的区别,操 ...

  3. 典型相关分析如何分析两组变量的关系

    前言 我们在分析两组变量之间的相关性时,比如X=[X1,X2,...,Xm]X=[X_1,X_2,...,X_m]和Y=[Y1,Y2,...,Yn]Y=[Y_1,Y_2,...,Y_n],最原始的方法 ...

  4. python数据分析 - 如何探索数据

    python数据分析 1.数据的组成 1.1 非结构化数据 1.2 结构化数据 1.3 矩形数据 1.4 非矩形数据 2.位置估计 2.1 均值 2.2 中位数和稳健估计量 3.变异性估计 3.1 标 ...

  5. 利用协方差,皮尔逊相关系数和斯皮尔曼相关系数确定变量间的关系

    利用协方差,皮尔逊相关系数和斯皮尔曼相关系数确定变量间的关系 https://www.toutiao.com/i6550915552490029576/ 数据集中的变量之间可能存在复杂且未知的关系.重 ...

  6. 【统计学笔记】如何判断变量间相关关系,并建立一元线性回归模型?

    本章内容: 判断两个变量间是否有相关关系,且关系强度如何? 如何建立一元线性回归模型,且模型效果如何? 如何利用回归方程进行预测? 为什么要进行残差分析,及如何进行分析? 索引

  7. R数据分析:变量间的非线性关系,多项式,样条回归和可加模型

    之前的文章中都是给大家写的变量间线性关系的做法,包括回归和广义线性回归,变量间的非线性关系其实是很常见的,今天给大家写写如何拟合论文中常见的非线性关系.包括多项式回归Polynomial regres ...

  8. Python数据可视化 | 6、基于Sesborn探索变量间的关系

    目录 绘制线性回归模型 拟合不同模型 残差图 变量间的条件关系探索 控制图片的大小和形状 小结 数据变量之间的关联性,主要针对定量数据而言: 数据的分布问题也是主要针对定量数据: 分组问题及组间问题里 ...

  9. python使用matplotlib可视化、使用xcorr函数可视化两个变量的互相关图、使用acorr函数可视化自相关图像

    python使用matplotlib可视化.使用xcorr函数可视化两个变量的互相关图.使用acorr函数可视化自相关图像 目录

  10. python matplotlib数据可视化教程_matplotlib的Python数据可视化和探索——入门指南

    matplotlib--最受欢迎的Python库,用于数据可视化和探索 我喜欢在Python中使用matplotlib.这是我学会掌握的第一个可视化库,此后一直存在.matplotlib是最受欢迎的用 ...

最新文章

  1. Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter
  2. Spring MVC + Hibernate JPA + Bootstrap 搭建的博客系统
  3. spring获取bean的方案
  4. UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举
  5. Android核心分析之GUI框架的原理
  6. jQuery常见的选择器操作运算符
  7. 【原创】大叔经验分享(27)linux服务器升级glibc故障恢复
  8. Python小项目——学生信息管理系统(详细讲解)
  9. WebBrowser的Cookie操作
  10. 大前端时代下,如何成为一名优秀的程序员?
  11. Python - 列表与字典相互转换
  12. Android签名概述
  13. excel出入库采购库存管理系统
  14. java为什么是静态的_为什么此方法必须是静态的(Java)?
  15. 太阳系(Python)
  16. DirectAdmin
  17. 用gcc编译.cpp文件可能出现undefined reference to `__gxx_personality_v0'问题的解决
  18. Hive QL的经典题详解
  19. java文件删除选择框,从列表框中删除文件
  20. vue中使用echarts中国地图

热门文章

  1. C# 温故而知新:Stream篇(五)
  2. 老中医治蛋变成绿色了
  3. ODI 12C 数据元表主资料库67个表 工作资料库153个表
  4. ---Xubuntu简体中文版, USB盘启动安装方法!
  5. 计算机打数据执行保护删除不掉,XP老是出现“数据执行保护”怎么办?教你方法轻松解决此问题...
  6. SVG 绘制可交互的中国地图
  7. 数据库并发问题 封锁协议 隔离级别
  8. 浅谈国内域名注册商与国外域名注册商的区别与优势
  9. 半同步/半异步模式,半同步半反应堆reactor模式
  10. 从哲学的视角看待项目生命周期——构建不一样的世界