【R画图学习10.2】复杂箱图和显著性检验

前面学习了一些箱图的画图技巧,这次我们试着重复一个paper中的图。从这个paper中来看,是在普通箱图的基础上又分成了Tumor和Normal2个group,并且每个group进行了统计学的显著性检验。另外按照mean/median进行了降序排序。但是并不是每个project都有2组。利用统计的方法是wilcoxon rank-sum test。

library(ggplot2)

library(ggpubr)

library(tidyverse)

library(latex2exp)

library(rstatix)

data <- read.csv("hsa-let-7a-5p.TCGA_PanCancer_Expression_Data.csv", header = T)

head(data)

data_new <- data %>%

group_by(project) %>%

mutate(median = median(expr), group_max = max(expr)) %>%  #按project来计算均值

arrange(desc(median))    #按median降序排序


# 调整因子顺序,因为geom_boxplot在画图的时候,对于字符变量,会按照ASCII排序,所以要指定他们的顺序。

data_new$project <- factor(data_new$project, levels = unique(data_new$project))

ggplot(data_new,aes(project, expr, fill = group))+

  geom_boxplot(outlier.shape = 21, outlier.fill = "white")+

  scale_fill_manual(values = c("Tumor" = "#d6503a", "Normal" = "#5488ef"))+

  theme_bw()+

  theme(axis.text = element_text(face = "bold"),

        axis.text.x = element_text(angle = 45, hjust = 1))

从图中来看,实现了2个group的划分,也实现了从大到小的排序。

下面我们来添加如何添加统计检验的结果,对于每个project对于tumor和normal进行显著性检验。

如果只针对含有normal和tumor的project的话,用上个帖子的stat_compare_means就可以实现。

data_new1 <- data_new %>% group_by(project) %>% mutate(group_number = length(unique(group)))   #这里我们主要计算每个project含有group的数量是1还是2

data_new2 <- data_new1[which(data_new1$group_number == 2),]  #挑选group数量是2的project,也就是挑选了含有tumor和normal的project

ggplot(data_new2, aes(x = project, y =expr, fill = group))+

geom_boxplot(outlier.shape = 21, outlier.fill = "white")+

scale_fill_manual(name = NULL, values = c("Tumor" = "#d6503a", "Normal" = "#5488ef"))+

theme_bw()+

theme(axis.text = element_text(face = "bold"),

        axis.text.x = element_text(angle = 45, hjust = 1),

        axis.line = element_line(colour = "black"),

        panel.border = element_blank(),

        panel.background = element_blank())+

  stat_compare_means(data = data_new2,aes(x=project,y=expr,group=group),label = "p.signif")


但是需要注意的是并不是每一个都含有normal,所以我们可能需要首先计算一下显著性检验,然后手动添加上去这个label。

data_new3 <- unique(data_new2[,c(2, 7,8)])

# 此数据用于添加显著性检验的label:

stat_data <- data_new2 %>%

  group_by(project) %>%

  wilcox_test(expr ~ group) %>%

  adjust_pvalue(method = "fdr") %>%

  add_significance('p')%>%

add_xy_position(x = "project")

stat_data2 <- merge(stat_data, data_new3, by = "row.names", all = T)  #主要为了加入group的最大值,来控制label的Y轴位置。

ggplot(data_new, aes(x = project, y =expr, fill = group))+

 geom_boxplot(outlier.shape = 21, outlier.fill = "white")+

 scale_fill_manual(name = NULL, values = c("Tumor" = "#d6503a", "Normal" = "#5488ef"))+

 theme_bw()+

 theme(axis.text = element_text(face = "bold"),

        axis.text.x = element_text(angle = 45, hjust = 1),

        axis.line = element_line(colour = "black"),

        panel.border = element_blank(),

        panel.background = element_blank(),

        legend.position = c(0.99, 0.99),

        legend.justification = c(1,1))+

annotate(geom = "text", x=stat_data2$x, y = stat_data2$group_max+0.25, label = as.character(stat_data2$p.signif))  #来手动的添加统计检验的文本上去

最后修改一下坐标注释等。

ggplot(data_new, aes(x = project, y =expr, fill = group))+

  geom_boxplot(outlier.shape = 21, outlier.fill = "white")+

  scale_fill_manual(name = NULL, values = c("Tumor" = "#d6503a", "Normal" = "#5488ef"))+

  theme_bw()+

  labs(y = TeX("miRNA Level ($log_{2}$CPM)", bold = T),x="")+

  theme(axis.text = element_text(face = "bold"),

        axis.text.x = element_text(angle = 45, hjust = 1),

        axis.line = element_line(colour = "black"),

        panel.border = element_blank(),

        panel.background = element_blank(),

        legend.position = c(0.99, 0.99),

        legend.justification = c(1,1))+

annotate(geom = "text", x=stat_data2$x, y = stat_data2$group_max+0.25, label = as.character(stat_data2$p.signif))

但是,还有一个中括号,我不太清楚怎么添加比较好。

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

推荐阅读更多精彩内容