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