前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ggplot2优雅的给图像添加阴影

ggplot2优雅的给图像添加阴影

作者头像
R语言数据分析指南
发布2022-09-21 15:36:03
8740
发布2022-09-21 15:36:03
举报

❝本周「VIP群」有个朋友询问下面这张图的绘制方法,需要对两组数据做统计分析并且只给差异显著的添加阴影背景,那么肯定是要全部通过代码来自动实现这些需求;即然观众老爷有需求那小编就来详细拆解一下这张图的代码,下面来看具体案例 ❞

加载R包

代码语言:javascript
复制
library(tidyverse)
library(rstatix)
library(ggpubr)
library(GGally)
library(ggsci)

导入数据

代码语言:javascript
复制
df <- read_csv("easy_input.csv")

❝由于要根据显著性来添加阴影,因此就不能使用那些自动添加p值的函数,在此我们使用「rstatix」来进行统计分析得到p值结果 ❞

统计分析

代码语言:javascript
复制
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值结果与原始数据进行整合 ❞

构建阴影填充分组

代码语言:javascript
复制
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为同一颜色即可解决此问题 ❞

数据可视化

代码语言:javascript
复制
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"))

❝好了本节介绍到此结束,只要想清楚数据结构,代码写起来还是非常简单的;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言数据分析指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 加载R包
  • 导入数据
  • 统计分析
  • 构建阴影填充分组
  • 数据可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档