❝本周「VIP群」有个朋友询问下面这张图的绘制方法,
需要对两组数据做统计分析并且只给差异显著的添加阴影背景
,那么肯定是要全部通过代码来自动实现这些需求;即然观众老爷有需求那小编就来详细拆解一下这张图的代码,下面来看具体案例 ❞
library(tidyverse)
library(rstatix)
library(ggpubr)
library(GGally)
library(ggsci)
df <- read_csv("easy_input.csv")
❝由于要根据显著性来添加阴影,因此就不能使用那些自动添加p值的函数,在此我们使用「rstatix」来进行统计分析得到p值结果 ❞
test <- df %>% group_by(tissue) %>%
t_test(tpm ~ type2) %>%
adjust_pvalue() %>% add_significance("p.adj") %>%
add_xy_position(x="tissue") %>% select(-y.position) %>%
mutate(y.position=10)
❝在得到P值的结果后由于我们的需求为只给「显著」的添加阴影,因此我们将p值的结果分为两类,并将p值结果与原始数据进行整合 ❞
df2 <- df %>% left_join(.,test %>% select(tissue,p.adj.signif) %>%
mutate(group=case_when(p.adj.signif =="ns" ~"B",
TRUE ~"A")),by="tissue") %>%
select(-p.adj.signif)
❝完成上面两步骤后我们就得到了添加阴影部分所需要的数据集,在此我们使用「geom_stripped_cols」按列来进行阴影填充,由于此函数是间隔1列进行填充,而我们指定的数据均为一组因此定义
odd,even
为同一颜色即可解决此问题 ❞
df %>% ggplot(aes(tissue,tpm))+
stat_boxplot(aes(fill=type2),geom="errorbar",position=position_dodge(width=0.6),width=0.2)+
geom_boxplot(aes(fill=type2),position=position_dodge(width=0.6),width=0.4,outlier.shape = NA)+
stat_pvalue_manual(test,label = "p.adj.signif",label.y=10,label.size=4,hide.ns = T,tip.length=0)+
labs(x=NULL,y=NULL)+
geom_stripped_cols(data=df2 %>% filter(group =="A"),odd = "#33333333", even = "#33333333")+
scale_fill_jco()+
theme_test()+
theme(plot.margin=unit(c(0.2,0.2,0.2,0.2),units=,"cm"),
axis.line = element_line(color = "black",size = 0.4),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(size = 0.2,color = "#e5e5e5"),
axis.text.y = element_text(color="black",size=10),
axis.text.x = element_text(margin = margin(t =0.5),color="black",size=10),
legend.position = "none",
panel.spacing = unit(0,"lines"))
❝好了本节介绍到此结束,只要想清楚数据结构,代码写起来还是非常简单的;