前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🤗 boxjitter | 完美复刻Nature上的高颜值统计图

🤗 boxjitter | 完美复刻Nature上的高颜值统计图

作者头像
生信漫卷
发布2022-10-31 17:03:40
3540
发布2022-10-31 17:03:40
举报

1. 写在前面

原文地址: https://www.nature.com/articles/nature25479

今天要复刻的是这张Nature上的高颜值统计图,一半box,一半jitter

2. 用到的包

代码语言:javascript
复制
rm(list = ls())
library(tidyverse)
library(cowplot)
library(ggparl)

3. 示例数据

代码语言:javascript
复制
dat <- read.csv("geom_boxjitter_example.csv",row.names = 1)

长这个样子 ᑋᵉᑊᑊᵒ ᵕ̈ ᑋᵉᑊᑊᵒ

4. 数据整理

这里我们先把数据整理成ggplot需要的格式

@(。・o・)@

代码语言:javascript
复制
dat_long <- dat %>%  
  gather(key, value, 1:6) %>% 
  mutate(loc = factor(loc, levels = c("abro", "dome")),
         type = factor(type),
         key = factor(key))

5. 开始画图

5.1 初步绘图
代码语言:javascript
复制
p1 <- ggplot(dat_long, aes(x = type, y = value, fill = key))+
  geom_boxjitter(outlier.color = NA, 
                 jitter.shape = 21, 
                 jitter.color = NA, 
                 jitter.height = 0.05, 
                 jitter.width = 0.075, 
                 errorbar.draw = TRUE) 
p1

5.2 减少分组

原图只有四个组,我们在这里用filter函数过滤一下,变成四组

代码语言:javascript
复制
dat_long <- dat_long %>% 
  filter(key %in% c("p1", "p2","p3","p4"))
  
p2 <- ggplot(dat_long,
             aes(x = type, y = value, fill = key))+
  geom_boxjitter(outlier.color = NA, 
                 jitter.shape = 21, 
                 jitter.color = NA, 
                 jitter.height = 0.05, 
                 jitter.width = 0.075, 
                 errorbar.draw = TRUE) 
p2


5.3 修改细节

去掉背景,更改颜色

代码语言:javascript
复制
p3 <- p2 +
  theme_bw()+
  theme(panel.grid = element_blank(),
        panel.border = element_blank(),
        axis.line = element_line(colour = "black"),
        legend.position = "none") +
  ylim(c(-0.1, 1.05)) + 
  scale_fill_manual(values = c("#0E72BA", "#D95426",
                               "#ecb21e", "#812e91"))

p3

5.4 只展示其中比较好看的两组

我果然是个颜狗啊 /ᐠ。ꞈ。ᐟ\

代码语言:javascript
复制
p4 <- ggplot(
  dat_long %>% filter(key %in% c("p1", "p2")), 
  aes(x = type, y = value, fill = key)) +
  geom_boxjitter(outlier.color = NA, jitter.shape = 21, jitter.color = NA, 
                 jitter.height = 0.05, jitter.width = 0.075, errorbar.draw = TRUE) +
  theme_bw()+
  theme(panel.grid = element_blank(),
        panel.border = element_blank(),
        axis.line = element_line(colour = "black"),
        legend.position = "none") +
  ylim(c(-0.05, 1.05)) + 
  scale_fill_manual(values = c("#ecb21e", "#812e91"))
p4


5.5 加上统计值

这里我们用ggpubr包的stat_compare_means()函数给神图加上统计值

代码语言:javascript
复制
library(ggpubr)
# 添加p值
p5 <- p4 + 
  stat_compare_means(#label = "p.signif", 
                     #label.x = 1.5, 
                     method = "t.test",
                     label.y = 1) 

p5

6. 最后把上面的结果都拼到一起吧

代码语言:javascript
复制
plot_grid(p1, p2, p3, p5, 
          labels = "AUTO",
          label_size = 30)

茶最后祝大家早日不卷!~


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

本文分享自 生信漫卷 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 写在前面
  • 2. 用到的包
  • 3. 示例数据
  • 4. 数据整理
  • 5. 开始画图
    • 5.1 初步绘图
      • 5.2 减少分组
        • 5.3 修改细节
          • 5.4 只展示其中比较好看的两组
            • 5.5 加上统计值
            • 6. 最后把上面的结果都拼到一起吧
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档