箱线图

箱线图是能同时反映数据统计量和整体分布,又很漂亮的展示图。在2014年的Nature Method上有2篇Correspondence论述了使用箱线图的好处和一个在线绘制箱线图的工具。就这样都可以发两篇Nature method,没天理,但也说明了箱线图的重要意义。

下面这张图展示了Bar plot、Box plot、Volin plot和Bean plot对数据分布的反应。从Bar plot上只能看到数据标准差或标准误不同;Box plot可以看到数据分布的集中性不同;Violin plot和Bean plot展示的是数据真正的分布,尤其是对Biomodal数据的展示。

Box plot从下到上展示的是最小值,第一四分位数 (箱子的下边线)、中位数 (箱子中间的线)、第三四分位数 (箱子上边线)、最大值,具体解读看这里扩增子图表解读1箱线图:Alpha多样性。

一步步解析箱线图绘制

假设有这么一个基因表达矩阵,第一列为基因名字,后面几列为样品名字,想绘制下样品中基因表达的整体分布。

profile="Name;2cell_1;2cell_2;2cell_3;4cell_1;4cell_2;4cell_3;zygote_1;zygote_2;zygote_3

A;4;6;7;3.2;5.2;5.6;2;4;3

B;6;8;9;5.2;7.2;7.6;4;6;5

C;8;10;11;7.2;9.2;9.6;6;8;7

D;10;12;13;9.2;11.2;11.6;8;10;9

E;12;14;15;11.2;13.2;13.6;10;12;11

F;14;16;17;13.2;15.2;15.6;12;14;13

G;15;17;18;14.2;16.2;16.6;13;15;14

H;16;18;19;15.2;17.2;17.6;14;16;15

I;17;19;20;16.2;18.2;18.6;15;17;16

J;18;20;21;17.2;19.2;19.6;16;18;17

L;19;21;22;18.2;20.2;20.6;17;19;18

M;20;22;23;19.2;21.2;21.6;18;20;19

N;21;23;24;20.2;22.2;22.6;19;21;20

O;22;24;25;21.2;23.2;23.6;20;22;21"

读入数据并转换为ggplot2需要的长数据表格式

profile_text

# 在melt时保留位置信息

# melt格式是ggplot2画图最喜欢的格式

# 好好体会下这个格式,虽然多占用了不少空间,但是确实很方便

library(ggplot2)

library(reshape2)

data_m

head(data_m)

variable value

1 2cell_1 4

2 2cell_1 6

3 2cell_1 8

4 2cell_1 10

5 2cell_1 12

6 2cell_1 14

像往常一样,就可以直接画图了。

# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。

p

geom_boxplot() +

theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +

theme(legend.position="none")

p

# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off()

dev.off()

箱线图出来了,看上去还可以,再加点色彩

# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。

p

geom_boxplot(aes(fill=factor(variable))) +

theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +

theme(legend.position="none")

p

# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off()

dev.off()

再看看Violin plot

# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。

p

geom_violin(aes(fill=factor(variable))) +

theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +

theme(legend.position="none")

p

# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off()

dev.off()

还有Jitter plot (这里使用的是ggbeeswarm包)

library(ggbeeswarm)

# 为了更好的效果,只保留其中一个样品的数据

# grepl类似于Linux的grep命令,获取特定模式的字符串

data_m2

# variable和value为矩阵melt后的两列的名字,内部变量, variable代表了点线的属性,value代表对应的值。

p

geom_quasirandom(aes(colour=factor(variable))) +

theme_bw() + theme(panel.grid.major = element_blank(),

panel.grid.minor = element_blank(), legend.key=element_blank()) +

theme(legend.position="none")

# 也可以用geom_jitter(aes(colour=factor(variable)))代替geom_quasirandom(aes(colour=factor(variable)))

# 但个人认为geom_quasirandom给出的结果更有特色

ggsave(p, filename="jitterplot.pdf", width=14, height=8, units=c("cm"))

绘制单个基因 (A)的箱线图

为了更好的展示效果,下面的矩阵增加了样品数量和样品的分组信息。

profile="Name;2cell_1;2cell_2;2cell_3;2cell_4;2cell_5;2cell_6;4cell_1;4cell_2;4cell_3;4cell_4;4cell_5;4cell_6;zygote_1;zygote_2;zygote_3;zygote_4;zygote_5;zygote_6

A;4;6;7;5;8;6;3.2;5.2;5.6;3.6;7.6;4.8;2;4;3;2;4;2.5

B;6;8;9;7;10;8;5.2;7.2;7.6;5.6;9.6;6.8;4;6;5;4;6;4.5"

profile_text

data_m = data.frame(t(profile_text['A',]))

data_m$sample = rownames(data_m)

# 只挑选显示部分

# grepl前面已经讲过用于匹配

data_m[grepl('_[123]', data_m$sample),]

获得样品分组信息 (这个例子比较特殊,样品的分组信息就是样品名字下划线前面的部分)

# 可以利用strsplit分割,取出其前面的字符串

# R中复杂的输出结果多数以列表的形式体现,在之前的矩阵操作教程中

# 提到过用str函数来查看复杂结果的结构,并从中获取信息

group = unlist(lapply(strsplit(data_m$sample,"_"), function(x) x[1]))

data_m$group = group

data_m[grepl('_[123]', data_m$sample),]

如果没有这个规律,也可以提到类似于下面的文件,指定样品所属的组的信息。

sampleGroup_text="Sample;Group

zygote_1;zygote

zygote_2;zygote

zygote_3;zygote

zygote_4;zygote

zygote_5;zygote

zygote_6;zygote

2cell_1;2cell

2cell_2;2cell

2cell_3;2cell

2cell_4;2cell

2cell_5;2cell

2cell_6;2cell

4cell_1;4cell

4cell_2;4cell

4cell_3;4cell

4cell_4;4cell

4cell_5;4cell

4cell_6;4cell"

#sampleGroup = read.table(text=sampleGroup_text,sep="\t",header=1,check.names=F,row.names=1)

#data_m

# 会获得相同的结果,脚本注释掉了以免重复执行引起问题

矩阵准备好了,开始画图了 (小提琴图做例子,其它类似)

# 调整下样品出现的顺序

data_m$group

# group和A为矩阵中两列的名字,group代表了值的属性,A代表基因A对应的表达值。

# 注意看修改了的地方

p

geom_violin(aes(fill=factor(group))) +

theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +

theme(legend.position="none")

p

# 图会存储在当前目录的Rplots.pdf文件中,如果用Rstudio,可以不运行dev.off()

长矩阵绘制箱线图

常规矩阵绘制箱线图要求必须是个方正的矩阵输入,而有时想比较的几个组里面检测的值数目不同。比如有三个组,GrpA组检测了6个病人,GrpB组检测了10个病人,GrpC组是12个正常人的检测数据。这时就很难形成一个行位检测值,列为样品的矩阵,长表格模式就适合与这种情况。

long_table

GrpA;10

GrpA;11

GrpA;12

GrpB;5

GrpB;4

GrpB;3

GrpB;2

GrpC;2

GrpC;3"

long_table

p

geom_violin(aes(fill=factor(Grp))) +

theme(axis.text.x=element_text(angle=50,hjust=0.5, vjust=0.5)) +

theme(legend.position="none")

p

长表格形式自身就是常规矩阵melt后的格式,这种用来绘制箱线图就很简单了,就不做解释了。

R语言学习 第四篇:函数和流程控制

变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

R语言学习笔记:基础知识

1.数据分析金字塔 2.[文件]-[改变工作目录] 3.[程序包]-[设定CRAN镜像] [程序包]-[安装程序包] 4.向量 c() 例:x=c(2,5,8,3,5,9) 例:x=c(1:100) ...

R语言学习笔记:分析学生的考试成绩

孩子上初中时拿到过全年级一次考试所有科目的考试成绩表,正好可以用于R语言的统计分析学习.为了不泄漏孩子的姓名,就用学号代替了,感兴趣可以下载测试数据进行练习. num class chn math e ...

R语言学习笔记(二)

今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars

R语言学习笔记(数据预处理)

setwd("d:/r/r-data/")data=read.table("salary.txt",header=T)attach(data)mean(Sala ...

R语言学习路线和常用数据挖掘包(转)

对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑到论坛上吼一嗓子,然后欣然or悲伤的离去,一直到遇到下一个问题再回来.当然,这不是最好的学习方式,最好的方式是——看书.目前,市面上介绍R语言的 ...

R语言学习笔记︱Echarts与R的可视化包——地区地图

笔者寄语:感谢CDA DSC训练营周末上完课,常老师.曾柯老师加了小课,讲了echart与R结合的函数包recharts的一些基本用法.通过对比谢益辉老师GitHub的说明文档,曾柯老师极大地简化了一 ...

【R语言学习】时间序列

时序分析会用到的函数 函数 程序包 用途 ts() stats 生成时序对象 plot() graphics 画出时间序列的折线图 start() stats 返回时间序列的开始时间 end() st ...

R语言学习笔记:因子

R语言中的因子就是factor,用来表示分类变量(categorical variables),这类变量不能用来计算而只能用来分类或者计数. 可以排序的因子称为有序因子(ordered factor) ...

随机推荐

javascript的快速排序法

在排序方式中,快速是比较普遍使用的,因为其速度快. 因为其是不断的递归,而且是根据基准点的左右两边开始递归,直到数组只有一个值的时候才返回. 这个基准点是自己定的. 一般取中间,比较好理解. < ...

c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区

一.几个修饰关键字 全局变量: 全局变量跟函数一样也分为声明和实现.如果是全局变量,实现在它调用之后,那么需要在调用之前进行声明.注意:全局变量的声明只能写在函数外,写在函数就不是全局变量了而是局部变 ...

MFC的GUI窗口使用Console输出函数printf

在GUI程序中使用printf函数: #include #include void InitConsole() { ; FILE* fp; A ...

嵌入式Linux LED小灯点亮实验

问:怎么写LED驱动程序? 1.搭建一个字符驱动的框架(上一节已经完成) 2.完善硬件的操作 问:驱动里操作硬件寄存器与单片机操作硬件寄存器有什么不一样的地方? 答:单片机操作的寄存器地址是物理地址, ...

python科学计算&lowbar;numpy&lowbar;广播与下标

多维数组下标 多维数组的下标是用元组来实现每一个维度的,如果元组的长度比维度大则会出错,如果小,则默认元组后面补 : 表示全部访问: 如果一个下标不是元组,则先转换为元组,在转换过程中,列表和数组的转 ...

windows bat 批处理 执行 for 循环无法执行?

示例:   cmd 命令行可以执行.但是 写成 bat 却不能执行, for /f "delims==" %a in ('dir /b /s F:\F\*.TXT')do copy ...

js五道经典练习题--第四道qq好友列表

& ...

MySQL 5&period;6比较重要的参数,以及5&period;5到5&period;6默认值有过变化的参数

新参数说明和设置,这里说下5.6比较重要的参数,以及5.5到5.6默认值有过变化的参数. MySQL Server参数: 1,optimizer_switch:优化器选项. Variable_name ...

SQL中的LIKE中用参数化查询

今天终于学会怎么在like中用参数化查询啦..哈哈..再也不用担心sql注入了...

r语言echarts画箱线图_R语言学习 - 箱线图(小提琴图、抖动图、区域散点图)相关推荐

  1. r语言ggplot画两条曲线_R语言作图——Line plot with error

    原创:黄小仙 为了画今天的这个图,小仙决定凭空想象一台可以实时监控基因表达水平的设备,成功得到了这么一组数据. 想要画的图是这样子滴. Step1.绘图数据的准备 首先要把你想要绘图的数据调整成R语言 ...

  2. MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]

    MakeCode图形化编程语言学习笔记:micro:bit编程练习题[图]: 基础训练题: Q1:摇晃micro:bit编程板,随机出现7个小动物图标中的一个,并且前后相邻两次出现的小动物不重复. 注 ...

  3. r语言echarts画箱线图_echarts学习笔记之箱线图的分析与绘制详解

    一.箱线图 box-plot 箱线图(boxplot)也称箱须图(box-whisker plot),它是用一组数据中的最小值.第一四分位数.中位数.第三四分位数和最大值来反映数据分布的中心位置和散布 ...

  4. r语言折线图_R语言做多变量可视化分析?

    笔者邀请您,先思考: 1 什么是多变量可视化分析? 2 多变量的常用可视化图形有哪些?适合在什么场景下应用 (需要内推数据工作,请加微信:luqin360) 多变量可视化分析是一种利用可视化手段探索多 ...

  5. r语言ggplot2一夜多图_R语言ggplot2画四方形的热图展示相关系数的简单小例子

    R语言里画热图通常会使用pheatmap这个包.如果想使用ggplot2这个包画热图的话需要借助geom_tile()这个函数.今天的内容就以相关系数的数据为例介绍一下ggplot2画热图的一个简单小 ...

  6. r语言绘制精美pcoa图_R语言绘制交互式热图

    热图 通过热图可以简单地聚合大量数据,并使用一种渐进的色带来优雅地表现,最终效果一般优于离散点的直接显示,可以很直观地展现空间数据的疏密程度或频率高低.但也由于很直观,热图在数据表现的准确性并不能保证 ...

  7. R语言多层桑基图_R语言轻松搞定用户路径桑基图

    用户路径分析,在互联网产品用户分析中是经常用到的,而使用最多的就是桑基图. 来自百度百科的定义:桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图.它是一种特定类型的流程图, ...

  8. r中gglot怎么组合多张图_R语言:多幅图形组合为一幅图形的方法

    备注:学习备忘 在R中使用函数par()或layout()可以容易地组合多幅图形为一幅总括图形. 你可以在par()函数中使用图形参数mfrow=c(nrows, ncols)来创建按行填充的.行数为 ...

  9. r语言的MASS包干什么的_R语言综述的包

    Multivariate Statistics (多元统计) 基本的R包已经实现了传统多元统计的很多功能,然而CRNA的许多其它包提供了更深入的多元统计方法,下面做个简要的综述.多元统计的特殊应用在C ...

最新文章

  1. Java 8 失宠!开发人员向 Java 11 转移...
  2. 稳压管,TVS管,压敏电阻,气体放电管等电涌保护器器件比较------amoBBS
  3. leetcode每日刷题计划-简单篇day8
  4. Linux -- Samba访问控制
  5. 《学习Opencv》第五章 习题6
  6. Linux 命令之 sed -- 功能强大的流式文本编辑器
  7. linux 生成hash值命令,linux-从给定哈希计算base64编码哈希?
  8. Python语法入门
  9. el-cascader超出屏幕问题
  10. 贝叶斯集锦:贝叶斯派和频率派的一个例子
  11. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_3_练习_使用递归计算阶乘...
  12. Android串口调试工具ComAssistant下载
  13. MATLAB 读取和显示 bin 文件数据
  14. 黑盒测试测试用例__判定表
  15. 2018阿里菜鸟无人仓一面面经
  16. 删除SATA硬盘安全删除硬件图标
  17. ipad无线无法连接到服务器,ipad无法连接无线路由器原因有哪些【解决方法】
  18. 【成为架构师课程系列】消息队列:秒杀时如何处理每秒上万次的下单请求?
  19. App怎么推广最有效
  20. 三个人拍顺序c语言,最简单的c程拍序设计.ppt

热门文章

  1. 互联网or互联网+,背后的支撑是什么?
  2. java 微信高级群发_Java微信高级群发接口demo--Java学习网
  3. sync.Mutex 与 sync.WaitGroup 使用示例
  4. 微信小程序 php毛玻璃,微信小程序 CSS filter(滤镜)的使用示例详解
  5. 小学生蓝桥杯Python闯关 | 汇总
  6. 马化腾关于腾讯梦想的回复截图系网友PS;天天P图回应收集隐私;库克回应巴菲特增持苹果股票丨价值早报...
  7. pe下如何装linux系统安装教程,没装系统,也能在PE下安装OPENSUSE(小小教程)
  8. 你的分支在3次提交之前领先于‘origin / master‘
  9. 前端面试百问百答(上)
  10. nat123分享送T币活动