分享

不好好做图的NSC系列(九):ggplot2重现Nature文章折线图+多图叠加

 TS的美梦 2022-01-24

今天继续重现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整体图都是比较简单的,但是呈现方式很有新意,值得学习!你学会了吗?还不点赞!!!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多