R语言ggboxplot-一文掌握箱线图绘制所有细节

作者:白介素2
相关阅读:
R语言ggplot2绘制箱线图R语言生存分析04-Cox比例风险模型诊断
R语言生存分析03-Cox比例风险模型
R语言生存分析-02-ggforest
R语言生存分析-01
ggpubr-专为学术绘图而生(二)
ggstatsplot-专为学术绘图而生(一)
生存曲线
R语言GEO数据挖掘01-数据下载及提取表达矩阵
R语言GEO数据挖掘02-解决GEO数据中的多个探针对应一个基因
R语言GEO数据挖掘03-limma分析差异基因
R语言GEO数据挖掘04-功能富集分析

如果没有时间精力学习代码,推荐了解:零代码数据挖掘课程

广而告之

说一个事,鉴于简书平台在信息传播方面有不足之处,应粉丝要求,白介素2的个人微信平台已经开启,继续聊临床与科研的故事,R语言,数据挖掘,文献阅读等内容。当然也不要期望过高,微信平台目前的定位是作为自己的读书笔记,如果对大家有帮助最好。如果感兴趣, 可以扫码关注下。

image

载入数据

Sys.setlocale('LC_ALL','C')
load(file = "F:/Bioinfor_project/Breast/AS_research/AS/result/hubgene.Rdata")
head(data)
require(cowplot)
require(tidyverse)
require(ggplot2)
require(ggsci)
require(ggpubr)
mydata<-data %>% 
  ## 基因表达数据gather,gather的范围应调整
  gather(key="gene",value="Expression",CCL14:TUBB3) %>% 
  ##
  dplyr::select(ID,gene,Expression,everything()) 
head(mydata)  ## 每个基因作为一个变量的宽数据

创建带有pvalue的箱线图

p <- ggboxplot(mydata, x = "group", y = "Expression",
          color = "group", palette = "jama",
          add = "jitter")
#  Add p-value
p + stat_compare_means()
image.png

改变统计方法

# Change method
p + stat_compare_means(method = "t.test")

image.png

统计学意义标注

  • label="p.signif"
  • p.format等
  • label.x标注位置
p + stat_compare_means( label = "p.signif")
image.png

多组比较

  • 给出global pvalue
# Default method = "kruskal.test" for multiple groups
ggboxplot(mydata, x = "gene", y = "Expression",
          color = "gene",add="jitter", palette = "jama")+
  stat_compare_means()

# Change method to anova
ggboxplot(mydata, x = "gene", y = "Expression",
          color = "gene", add="jitter", palette = "jama")+
  stat_compare_means(method = "anova")
image.png

image.png

指定比较

  • 配对比较:会完成各个变量的比较,默认wilcox.test法,可修改
  • my_comparisions:可以指定自己想要进行的比较
  • 指定参考组,进行比较
require(ggpubr)
compare_means(Expression ~ gene,  data = mydata)

## 指定自己想要的比较
# Visualize: Specify the comparisons you want
my_comparisons <- list( c("CCL14", "HBA1"), c("HBA1", "CCL16"), c("CCL16", "TUBB3") )
ggboxplot(mydata, x = "gene", y = "Expression",
          color = "group",add = "jitter", palette = "jama")+ 
  stat_compare_means(comparisons = my_comparisons)#+ # Add pairwise comparisons p-value
  #stat_compare_means()     # Add global p-value
image.png

指定参考组

指定CCL14作为参考组与其它各组比较
ref.group

compare_means(Expression ~ gene,  data = mydata, ref.group = "CCL14",
              method = "t.test")
# Visualize
mydata %>% 
  filter(group=="TNBC") %>% # 筛选TNBC数据
ggboxplot( x = "gene", y = "Expression",
          color = "gene",add = "jitter", palette = "nejm")+
  stat_compare_means(method = "anova")+      # Add global p-value
  stat_compare_means(label = "p.signif", method = "t.test",
                     ref.group = "CCL14")      
image.png

多基因分面

按另外一个变量分组比较

## 比较各个基因在TNBC与Normal表达
compare_means( Expression ~ group, data = mydata, 
              group.by = "gene")
# Box plot facetted by "gene"
p <- ggboxplot(mydata, x = "group", y = "Expression",
          color = "group", palette = "jco",
          add = "jitter",
          facet.by = "gene", short.panel.labs = FALSE)
# Use only p.format as label. Remove method name.
p + stat_compare_means(label = "p.format")
image.png

将pvalue换成星号

  • hide.ns = TRUE.参数可隐藏ns
p + stat_compare_means(label =  "p.signif", label.x = 1.5)
image.png

将各个图绘制在一张图中

p <- ggboxplot(mydata, x = "gene", y = "Expression",
          color = "group", palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
image.png

修改下pvalue展示的方式

# Show only p-value
p + stat_compare_means(aes(group = group), label = "p.format")
image.png

用星号表示pvalue

# Use significance symbol as label
p + stat_compare_means(aes(group = group), label = "p.signif")
image.png

配对样本比较

要求x,y具有相同的样本数,进行一一配对比较

head(ToothGrowth)
compare_means(len ~ supp, data = ToothGrowth, 
              group.by = "dose", paired = TRUE)
# Box plot facetted by "dose"
p <- ggpaired(ToothGrowth, x = "supp", y = "len",
          color = "supp", palette = "jama", 
          line.color = "gray", line.size = 0.4,
          facet.by = "dose", short.panel.labs = FALSE)
# Use only p.format as label. Remove method name.
p + stat_compare_means(label = "p.format", paired = TRUE)
image.png

封装为函数命名为group_box

  • 功能:已经选定的基因绘制箱线图
    • 参数1:group分组变量,可以是自己所有感兴趣的变量
  • 参数2:mydata为整理好的清洁数据,gene为长数据(gather版本)
head(mydata)
group_box<-function(group=group,data=mydata){
        p <- ggboxplot(mydata, x = "gene", y = "Expression",
          color = group, 
          palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
}

## 
group_box(group="PAM50",data = mydata)

封装为函数命名为group_box

  • 功能:已经选定的基因绘制箱线图
    • 参数1:group分组变量,可以是自己所有感兴趣的变量
  • 参数2:mydata为整理好的清洁数据,gene为长数据(gather版本)
head(mydata)
group_box<-function(group=group,data=mydata){
        p <- ggboxplot(mydata, x = "gene", y = "Expression",
          color = group, 
          palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
}

## 
group_box(group="PAM50",data = mydata)
image.png

封装函数gene_box

  • 目的功能:对感兴趣的基因绘制和分组绘制boxplot
  • 注意这时使用的应该是基因的宽数据,因为涉及到单个基因作为变量
head(data)
usedata<-data
## 封装函数
gene_box<-function(gene="CCL14",group="group",data=usedata){
p <- ggboxplot(data, x = group, y = gene,
          ylab = sprintf("Expression of %s",gene),
          xlab = group,
          color = group, 
          palette = "nejm",
          add = "jitter")
p + stat_compare_means(aes(group = group))
}
gene_box(gene="CCL14")
image.png

牛刀小试

gene_box(gene="CCL16",group="PAM50")

image.png

批量绘制

  • 目的功能:绘制任意基因,任意分组,批量绘制一气呵成了
  • 封装函数+lapply批量绘制无敌
  • 在lapply中的函数参数设置,不在原函数中,而是直接放置在lapply中
  • do.call中参数1为函数,+c()包含原函数的参数设置,同样参数设置不在原函数中
require(gridExtra)
head(data)

## 需要批量绘制的基因名
name<-colnames(data)[3:6]
## 批量绘图
p<-lapply(name,gene_box,group = "T_stage")
## 组图
do.call(grid.arrange,c(p,ncol=2))
image.png

本期的内容就到这里,我是老朋友白介素2,下期再见。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容