不好好做图的NSC系列(九):ggplot2重现Nature文章

2022-01-24  本文已影响0人  KS科研分享与服务

今天继续重现Nature文章图1g的折线图,有了之前的经验(不好好做图的NSC系列(八):ggplot2重现Nature文章多组柱状图+散点,这是一场硬仗),这次会相对简单。

首先数据位置和之前一样,先读入数据,用最普通的方法绘制折线图。

setwd("F:/生物信息学/NATURE折线图")
A <- read.csv("折线图.csv",header = T)

ggplot(A,aes(x = Day,y =values,
             group=group,color=group)) +                            
  stat_summary(fun.y="mean",geom="point",size=3) +        
  stat_summary(fun.y="mean",geom="line") +  
  stat_summary(fun.data = "mean_se",geom = "errorbar",width=0.05)+
  scale_color_nejm()+
  theme_bw()+
  theme(panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        panel.background = element_blank(),
        legend.key=element_blank())
图片

这个图与文章中的差距还是很大,主要需要修改的地方有:左右分区并填充,和之前的方法一样。还有y轴添加一条与x轴平行的线。修改线条和坐标轴!

ggplot(A,aes(x = Day,y =values,
             group=group,color=group))+
  geom_rect(aes(xmin=21,xmax=60,ymin=(-Inf),ymax=Inf),
            fill='grey90',color='grey90')+
  geom_vline(xintercept =21,linetype=2,cex=1.2)+
  stat_summary(geom = 'line',fun='mean',cex=2)+
  stat_summary(fun.y="mean",geom="line",cex=2) +  
  stat_summary(fun.data = "mean_se",geom = "errorbar",width=1,cex=1)+
  stat_summary(geom = 'point',fun='mean',aes(fill=group),
               size=5,pch=21,color='black')+
  theme_bw()+
  theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+
  theme(panel.border = element_blank())+
  theme(axis.line = element_line(colour = "black",size = 1))+
  theme_classic(base_size = 15)+
  labs(title = "", y="Weight change(%)", x = "Day")+
  scale_x_continuous(limits = c(0,60),expand = c(0,0))+
  geom_hline(yintercept=0)
图片

最后修改颜色,变成与原文一致的颜色填充。添加显著性标记,这里使用一个简单粗暴的函数annotate(),在之前一节里提过:不好好作图的NCS系列(四):ggplot2绘制多彩火山图


ggplot(A,aes(x = Day,y =values,
             group=group,color=group))+
  geom_rect(aes(xmin=21,xmax=60,ymin=(-Inf),ymax=Inf),
            fill='grey90',color='grey90')+
  geom_vline(xintercept =21,linetype=2,cex=1.2)+
  stat_summary(geom = 'line',fun='mean',cex=2)+
  stat_summary(fun.y="mean",geom="line",cex=2) +  
  stat_summary(fun.data = "mean_se",geom = "errorbar",width=1,cex=1)+
  stat_summary(geom = 'point',fun='mean',aes(fill=group),
               size=5,pch=21,color='black')+
  theme_bw()+
  theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+
  theme(panel.border = element_blank())+
  theme(axis.line = element_line(colour = "black",size = 1))+
  theme_classic(base_size = 15)+
  labs(title = "", y="Weight change(%)", x = "Day")+
  scale_x_continuous(limits = c(0,60),expand = c(0,0))+
  geom_hline(yintercept=0)+
  scale_color_manual(values = c('#5494cc','#0d898a','#e18283','#f9cc52'))+
  scale_fill_manual(values = c('#5494cc','#0d898a','#e18283','#f9cc52'))+
  annotate(geom = 'segment',x=52,xend = 52,y=2,yend = 12,cex=1)+
  annotate(geom = 'text',label='****',x=54,y=7,size=8,angle=90)
图片

最后就是图片叠加了,我们使用之前的柱状图。使用ggplotGrob()函数,设置好位置即可叠加!


top <- ggplotGrob(p1)
p2+annotation_custom(top,xmin=0,xmax=30,ymin=12,ymax=30)
图片

这篇Nature整体图都是比较简单的,但是呈现方式很有新意,值得学习!你学会了吗?还不点赞!!!

上一篇下一篇

猜你喜欢

热点阅读