ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
122 stars 30 forks source link

ggplot2优雅绘制多元素箱线图 #4681

Closed ixxmu closed 8 months ago

ixxmu commented 8 months ago

https://mp.weixin.qq.com/s/LJAFYTAfvVKMKrWa85FJTw

ixxmu commented 8 months ago

ggplot2优雅绘制多元素箱线图 by R语言数据分析指南

欢迎关注R语言数据分析指南

最近在会员交流群看到大家分享一张图,簇状箱线图+p值;此图属于比较基础的一类图,但是也有不少细节需要调整,本节小编来稍微复现一下,数据为随意构建无实际意义仅供参考,希望对各位观众老爷能有所帮助。「数据代码已经整合上传到会员交流群」,购买过小编VIP的朋友可在所加的会员群内获取下载,有需要的朋友可关注文中介绍加入VIP交流群。

案例图

仿图

绘图思路

此图归类于簇状箱线图,图中叠加元素主要有阴影背景条带、p值、显著性条带、图例文本颜色、图例位置等,细节繁多需要调整多个参数

关于永久群内容的说明

给予长期支持我们的读者们一个特别待遇:购买小编VIP会员文档的读者,「将自动获得2024年及以后更新的绘图文档代码,无需额外付费」。目前会员文档(2023+2024)「已经更新上传了140+案例文档」,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。

加载R包

install.packages("ggplot2")
library(tidyverse)
library(rstatix)
library(GGally)
library(ggtext)

数据清洗

df <- read_tsv("diff_GeneExp.txt") %>% 
  pivot_longer(-ID) %>% 
  mutate(type=map_chr(name, ~str_split(.x, "_")[[1]][length(str_split(.x, "_")[[1]])]))

统计分析

df_pvalue <- df %>% group_by(ID) %>%
  wilcox_test(value ~type) %>%
  adjust_pvalue(p.col = "p", method = "bonferroni") %>%
  add_significance(p.col = "p.adj") %>% 
  select(ID,p.adj)

数据整合

dff <- df %>% left_join(.,df_pvalue,by="ID") %>% 
  mutate(group=case_when(p.adj < 0.00001 ~ "Upregulated",
         TRUE ~ "NS")) %>% 
  mutate(p.adj=paste("p=",p.adj,sep=""))

数据可视化

dff %>% ggplot(aes(value,ID))+
  geom_stripped_rows(odd="grey90",xfrom =-0.5, xto =9.5)+
  geom_boxplot(aes(color=type),position = position_dodge(0.5),
               width=0.5,outliers = FALSE)+
  geom_text(data=dff %>% select(1,p.adj) %>% distinct(),
            aes(x=8.2,y=ID,label=p.adj),size=3,color="black")+
  scale_x_continuous(limits = c(0,10),breaks = c(2,4,6,8))+
  scale_y_discrete(expand =c(0,0.5))+
  scale_fill_manual(values =c("Upregulated"="#7294D4","NS"="grey"))+
  labs(x=NULL,y=NULL)+
  theme_classic()+
  theme(plot.margin=unit(c(0.5,0.5,0.5,0.5),unit="cm"),
        legend.justification.top = "left",
        legend.text = element_markdown(),
        legend.background = element_blank(),
        axis.line.x.bottom = element_blank(),
        axis.text=element_text(color="black"))

本节介绍到此结束,有需要学习数据可视化的朋友欢迎加入小编的VIP会员群,购买小编VIP会员文档的读者,「将自动获得2024年及以后更新的绘图文档代码,无需额外付费」。目前会员文档(2023+2024)「已经更新上传了140+案例文档」,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。「有需要者欢迎店铺咨询购买」

「2024更新的绘图内容同时包含数据+代码+markdown注释文档+文档清单」

淘宝店铺(长按二维码跳转)

关注下方公众号下回更新不迷路