R数据可视化2:箱形图 Boxplot

Python025

R数据可视化2:箱形图 Boxplot,第1张

箱形图(Box-plot)是一种用作 显示一组数据分散情况 的统计图,因形状如箱子而得名。除了生信领域,该图在其他领域也经常被使用。主要用于反映原始数据分布的特征,并且可以进行多组数据分布特征的比较。箱形图能显示出一组数据的 最大值(Maximum)、最小值(Minimum)、中位数(Median)及上下四分位数(1st/3rd Quartile) ,同时还可以显示 逸出值(Outlier)

那么,这些值是如何被计算出来的呢?什么样的数据会被判定为逸出值呢?

第一四分位数(Q1) ,又称 较小四分位数 ,等于该样本中所有数值由小到大排列后第25%的数字。

第二四分位数 ,又称 中位数 ,等于该样本中所有数值由小到大排列后第50%的数字。

第三四分位数(Q3) 又称 较大四分位数 ,等于该样本中所有数值由小到大排列后第75%的数字。

逸出值 ,是根据四分位间距(interquartile range)进行计算的:

四分位间距 = Q3-Q1 = ΔQ

在区间 Q3+1.5ΔQ, Q1-1.5ΔQ 之外的值即被视为逸出值。

(1) 需要什么格式的数据

我们需要的数据只要两列,一列为x,一列为y。本次我们使用R中提供的iris数据。

这个数据共有5列,分别为花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)以及物种(Species)。

比如我们想要探究不同物种的花萼长度差异。

(2) 如何使用ggplot2做箱形图

利用ggplot2画图的核心命令是 geom_boxplot 。我们先来尝试做一个最最基础也是最丑的boxplot图。

可以看到不同的物种之间Sepal.Length有所不同,那么这种差异显著吗?

这个时候我们就需要做检验,那么如何可以直接把检验结果展示在图中呢。这个时候我们可以使用另一个 R包ggpubr

同时如果你的检验是成对的那么可以加上参数 paired=T ,如果你不想用默认的wilcox.test你可以将method改为其他的。比如我想要做一个成对的t检验:

stat_compare_means(aes(label = ..p.signif..),method="t.test",paired=T)

可以发现这里我没有添加comparisons参数,那么结果就是看三组是否存在两组间有显著差异。

具体的大家可以使用命令 ?stat_compare_means 查看帮助手册。

然后我们还可以修改颜色等等。

这样,一张简洁的Boxplot图就完成啦。

配对箱线图,常见于配对样本的数据分析中。

例如下图示例,为了研究某些基因在肿瘤组织和正常组织中是否具有表达量的显著不同,在取样时,往往会在同一患者个体中同时获取肿瘤和临近正常组织,两个组织样本就是配对关系。当然在这类研究中,往往需要调查很多的患者,因此会获得大量的配对样本。随后,通过qPCR或RNA-seq等方法定量基因表达后,以箱线图呈现特定基因在肿瘤组织和正常组织中的整体表达水平,并在箱线图中以散点表示具体的样本,此时对于具有配对关系的肿瘤组织和正常组织样本,就可以通过连线连接起来。

这种配对箱线图的好处是,除了能够表现两组的整体差异,还能够清晰地呈现单个样本的前后改变。

本篇教程,就让我们带大家学习如何使用R语言绘制这种配对箱线图。

类似地,假设我们也期望查看某基因(例如MAP2)在肿瘤组织和正常组织中的表达改变情况,在收集了配对样本并检测了这些样本中基因表达水平后,配置这样一张表。

samples是样本名称;MAP2是基因MAP2在各样本中的表达值;group1是样本分组,告知它们来源于肿瘤组织还是正常组织;group2是配对样本信息,配对的两样本设置为同一亚组。

备注: 该示例数据集可点击这里获取。

随后,将上述示例数据导入R中。

绘制箱线图表示两组基因的整体表达水平,并以散点表示样本,配对样本间以连线连接。

这样,配对箱线图就获得了。

箱线图描述了组间基因表达水平改变的趋势,在该图中可以看到MAP2基因的表达在肿瘤组织和正常组织中是不一致的。后续如有需要,不妨执行配对样本的t检验等,计算显著性p值,作为评判基因表达显著差异的指标。

#b站视频——R语言入门与数据分析

#内置数据集

#固定格式的数据(矩阵、数据框或一个时间序列等)

#统计建模、回归分析等试验需要找合适的数据集

#R内置数据集,存储在,通过

help(package="datasets")

#通过data函数访问这些数据集

data()

#得到新窗口  前面:数据集名字  后面:内容

#包含R所有用到的数据类型,包括:向量、矩阵、列表、因子、数据框以及时间序列等

#直接输入数据集的名字就可以直接使用这些数据集

#输出一个向量

rivers

#是北美141条河流长度

#这些数据集的名字都是内置的,一般我们在给变量命名时最好不要重复

#否则数据集在当前对话中会被置换掉

#例如

rivers<-c(1,2,3)

rivers

#不过影响不大

#再使用data函数重新加载这个数据集就可以了

data("rivers")

rivers

#一些常用内置数据集

#默认介绍页面只有名字和介绍,并没有给出数据分类

#哪些是向量、矩阵、数据框等?

#查看数据集除了直接敲数据集名字显示数据之外

#还可以使用help函数查看每个数据集具体的内容

help("mtcars")

euro

#欧元汇率,长度为11,每个元素都有命名

#输出向量的属性信息

names(euro)

#将5个数据构成一个数据框

向量

state.abb #美国50个州的双字母缩写

state.area #美国50个州的面积

state.name #美国50个州的全称

因子

state.division #美国50个州的分类,9个类别

state.region #美国50个州的地理分类

#

state<-data.frame(state.name,state.abb,state.area,state.division,state.region)

state

state.x77 #美国50个州的八个指标

state.x77

VADeaths #1940年弗吉尼亚州死亡率(每千人)

volcano #某火山区的地理信息(10米×10米的网格)

WorldPhones #8个区域在7个年份的电话总数

iris3 #3种鸢尾花形态数据

#以上矩阵→适合画热图

heatmap(volcano)

#这里只是作为一个演示,还需要对这个图进行一些调整

#更复杂的数据结构

Titanic #泰坦尼克乘员统计,是一个数组

UCBAdmissions #伯克利分校1973年院系、录取和性别的频数

crimtab #3000个男性罪犯左手中指长度和身高关系

HairEyeColor #592人头发颜色、眼睛颜色和性别的频数

occupationalStatus #英国男性父子职业联系

#类矩阵

eurodist #欧洲12个城市的距离矩阵,只有下三角部分

Harman23.cor #305个女孩八个形态指标的相关系数矩阵

Harman74.cor #145个儿童24个心理指标的相关系数矩阵

#R中内置最多的数据集——数据框

cars #1920年代汽车速度对刹车距离的影响

iris #3种鸢尾花形态数据

mtcars #32辆汽车在11个指标上的数据

rock #48块石头的形态数据

sleep #两药物的催眠效果

swiss #瑞士生育率和社会经济指标

trees #树木形态指标

USArrests #美国50个州的四个犯罪率指标

women #15名女性的身高和体重

#列表

state.center #美国50个州中心的经度和纬度

#类数据框

Orange #桔子树生长数据

#时间序列数据,和数据框类似,不同的是具有时间序列的顺序,是数据分析中非常常见的格式

#能反映出变化情况以及变化的趋势等

#因此有很多专门的方法用于时间序列的数据分析

co2 #1959-1997年每月大气co2浓度(ppm)

presidents #1945-1974年每季度美国总统支持率

uspop #1790–1970美国每十年一次的人口总数(百万为单位)

#除了内置数据集之外,许多R扩展包中也内置了很多数据集

#这些数据集作为扩展包的函数使用的案例

#加载R包之后这些数据集也同样被加载进来

#例如MASS包中的Cars93数据

#包含了27个变量,是1993年93辆汽车的型号指标

install.packages("MASS")

library("MASS")

help("Cars93")

#使用data函数在参数package中等于对应R包的名字,即可列出每个R包中包含的数据集

#ex

data(package="MASS")

#显示R中所有可用的数据集

data(package=.packages(all.available = TRUE))

#不加载R包使用其中的数据集

data(Chile,package="car")

Chile

#>data(Chile,package="car")

#Warning message:

#  In data(Chile, package = "car") : data set ‘Chile’ not found

#>Chile

#Error: object 'Chile' not found

install.packages("car")

library("car")

help("Chile")