跟着Nature Genetics 学画图:R语言ggplot2画箱线图(boxplot)展示D s...

简介:R语言统计与绘图公众号目前致力于分享医学统计与R绘图知识,手把手教你使用R语言绘制基线特征表、KM生存曲线、森林图、ROC曲线等。每天一篇精彩R语言推文教程,手把手带你入门R语言绘图。

今天推文重复的图来自于 论文Whole-genome resequencing of 445 Lactuca accessions reveals the domestication history of cultivated lettuce

image.png

这篇论文的数据是公开的,代码也公开了一部分,那我们就可以按照他的提供的数据来试着复原一些论文中的图了。本来已经重复到了论文中Fig1的2c,但是试着做局部放大的时候遇到了一些问题,暂时还搞不定,看了其他的图实现起来还有一定的难度。所以先挑一个相对比较简单的箱线图来模仿一下吧。对应的是论文中的Figure 2d

image.png

数据是论文附件的  Source Data Fig.2

image.png
首先是读入数据
df<-readxl::read_excel('NG/41588_2021_831_MOESM5_ESM.xlsx',
                      sheet='Fig2d')

论文中提供的是宽格式数据,如果使用ggplot2作图需要转换成长格式,这里本来想尝试一下tidyr包中的pivot_longer()函数了,帮助文档没有看明白。没有搞定,还是直接使用reshape2中的melt()函数吧

library(dplyr)df %>%   mutate(new_col=paste(Group1,Group2,sep='_')) %>%   select(-c('Group1','Group2','Group3','Outgroup')) %>%   #reshape2::melt(var.ids=c('Group1')) %>%   #arrange(Group1,Group2) %>%   reshape2::melt(var.ids='new_col') -> df1

head(df1)
ggplot2 作图
library(ggplot2)
library(stringr)
library(ggprism)
x_level<-paste(df$Group1,df$Group2,sep='_')
x_level
df1$group<-str_sub(df1$new_col,5,7)
df1$new_col<-factor(df1$new_col,
                    levels = x_level)
ggplot(df1,aes(x=new_col,y=value))+
  stat_boxplot(geom = 'errorbar',width=0.2)+
  geom_boxplot(outlier.shape = 1,
               aes(fill=group),
               show.legend = F)+
  scale_fill_manual(values = c('#e64b35',
                               '#4daf4a',
                               '#4dbbd5',
                               '#cab2d6',
                               '#b2df8a'))+
  scale_x_discrete(labels=str_sub(x_level,1,3),
                   guide = 'prism_offset')+
  scale_y_continuous(limits = c(-0.021,0.085),
                     breaks = seq(-0.02,0.08,by=0.02))+
  theme_prism(axis_text_angle = 90,
              base_line_size = 0.1,
              base_fontface = 'plain',
              base_family = 'serif')+
  labs(x=NULL,
       y=expression(paste(italic('D'),' statistic')))+
  theme(plot.margin = unit(c(0.2,0.2,2,0.2),'cm'))+
  
  geom_segment(x=1,xend=5,y=-0.04,yend=-0.04)+
  annotate('text',x=3,y=-0.02,label='CAU',vjust=10)+
  geom_segment(x=6,xend=9,y=-0.04,yend=-0.04)+
  annotate('text',x=7.5,y=-0.02,label='SEU',vjust=10)+
  geom_segment(x=10,xend=12,y=-0.04,yend=-0.04)+
  annotate('text',x=11.5,y=-0.02,label='WEU',vjust=10)+
  geom_segment(x=13,xend=14,y=-0.04,yend=-0.04)+
  annotate('text',x=13.5,y=-0.02,label='EEU',vjust=10)+
  geom_segment(x=14.5,xend=15.5,y=-0.04,yend=-0.04)+
  annotate('text',x=15,y=-0.02,label='WAS',vjust=10)+
  annotate('text',x=1,y=-0.02,label='P1',
           hjust=2,vjust=5)+
  annotate('text',x=1,y=-0.02,label='P2',
           hjust=2,vjust=10)+
  coord_cartesian(clip = 'off')
image.png

箭头指的地方如何用代码缩短暂时不知道了,出图后手动调整吧

最终结果

image.png

这里遇到的问题是

  • 如何将箱线图的垂直线改成虚线呢?
(0)

相关推荐

  • R之箱线图绘制

    16s分析一直在连载,但是最基础的莫过于alpha多样性了,但是箱线图却不是alpha多样性的唯一选择,箱线图也不是局限于alpha多样性,这里借助alpha多样性,将箱线图做一个完整绘制 #这里安装 ...

  • 圣诞前送你们一朵使用ggplot画的玫瑰花

    library(tidyverse) 一只花柄 p <- ggplot() + coord_equal(1, c(-4, 2), c(-7, 3)) + geom_curve(aes(x = - ...

  • 高手题目一答案:nature高级组合图形绘制教程

    写在前面 开学了,大量工作来袭.我在成长,希望可以帮助大家一起成长.按照咱们的约定,在看数目超过50,我应该放出高手题目一的代码. 如果需要我重复高手题目二,请继续点赞,达到100个在看,献上高手题目 ...

  • 直播!R语言入门和ggplot2科研数据可视化入门分享!就在今晚,欢迎大家参加呀!

    会议时间:2021/03/17 19:30-21:30 (GMT+08:00) 点击链接入会,或添加至会议列表:https://meeting.tencent.com/s/H9goXk0EWnqO 会 ...

  • 绘图技巧 | 议会(项目)图还不会做?快上车~~

    好奇心Log 今天 以下文章来源于DataCharm ,作者宁海涛 DataCharm定期更新 数据分析.数据可视化(商业.学术图表)教程,同时也会涉及机器学习.深度学习模型的构建及应用.所用工具主要 ...

  • 技术贴 | R语言:ggplot绘图的Y轴截断和拼接

    导读 记录一个产生Y轴截断ggplot绘图的方法.先用coord_cartesian根据Y轴把图截断成上下两份,接着用ggarrange拼接到一起,实现去不要的部分 一.准备依赖包 ggarrange ...

  • 圣诞节微生信生物送你一颗专属生信领域的圣诞树

    写在前面 外国人把R语言绘制圣诞树在国外都作为家庭作业,虽然我并不过圣诞节,但是看看他们编写的代码还是蛮有意思的,今天我为大家带来三个版本的圣诞树绘制过程.都是基于R语言.这也算是我们一种娱乐吧. 注 ...

  • 网络图layout如何自定义

    写在前面 在构造更加合适我们解决问题的网络图layout过程中,我学习到了一些有意思的数据排布.这里展示给大家. 多边形–五边形 library(tidyverse) pentagon <- t ...

  • ggdag:DAG和因果图

    近几年来,因果推断同时受到多个学科的重视,是最火热的研究方向之一.因果图(或称路径图)是研究因果关系的一个有效的辅助性工具.借助因果图可以分析因果关系,将复杂问题图形化.本文介绍一个用来绘制因果图的R ...

  • 柱状图不够展示我的数据一气之下我把它掰弯了

    环形柱状图 圈图不同于柱状图的是可以展示更多的数据.下面进行尝试. 数据格式其实和正常柱状图数据格式相同.但是由于将卡迪尔直角坐标系转化为了极坐标系,所以标签的设置成为这一输出的难点和重点.辛运的是作 ...