首页 > 科研绘图 > 如何绘制Science文章的“花式”河流图?
2022
11-18

如何绘制Science文章的“花式”河流图?

堆叠图简直是万能大法有没有!

在各类微生物群落及目前大热的单细胞组学研究的文章中,堆叠图可以说是不可或缺的。

我们先一起欣赏下高分文章中的那些好看的柱状堆叠图

Fig1( Nat Biotechnol ,2021)

Fig2( Nature Cancer ,2021)

这一类图表将不同分组/样本中所有分类数据进行堆叠,并以百分比堆叠柱状图或者常规堆叠柱状图的形式进行展现,从而直观看出各个分类数据在不同组别下的占比情况。

如在微生物群落研究中,可用于展示不同样本的群落物种组成信息;而在单细胞研究中,可用于展示不同样本中各类亚群细胞数量信息或是各类亚群细胞中的来自不同样本的细胞数量等等。

还有一类堆叠面积图,主要在样本之间的处理方式存在梯度变化关系时(处理不同的时间、某处理后的一段时间、不同浓度梯度处理……)使用,这类图表更关注各个分类变量随着梯度处理产生的波动和变化趋势。由于可以画出好看的“流线”,又被称为河流图。如下,Fig3主要展示了各菌门OTUs的累积丰度随季节的变化。

Fig3( Science ,2017)

Fig4( Nat Cancer ,2021)

那么怎么看堆叠面积图呢?图表每个变量对应一种颜色,每个颜色围成的面积直观反应数据的大小,且每一个变量的数值都在前一个变量的基础上进行叠加,图形的总面积即为所有变量数据的总和(和堆叠柱状图类似)。

小编纵观一番,发现Excel就能画出面积堆叠图,但是只能画出“折线状”,并不能呈现出好看的“河流”。

想画出好看的河流图还是需要用到R,比如streamgraph包以及ggplot2的扩展包ggstream。ggplot2灵活性更强,因此今天主要用ggstream来画河流图,也给大家简单过一下用streamgraph包和Excel如何绘制。

1. ggstream绘制河流图大法

#安装ggstream拓展包和配色包RColorBrewer

install.packages('ggstream')

install.packages('RColorBrewer')

#载入ggstream包:

library(ggstream)

library(ggplot2)

library(RColorBrewer)

#设置工作目录:

setwd( "C:/Users/RenYing/Desktop/面积堆叠图")

#读入本地数据:

data<-read.table( "OTUs,ggstream.txt",header=T)

使用的数据格式整理如下:

#指定绘图顺序:

data$phylum <- factor(data$phylum,levels = unique(data$phylum))

#将数据与图形建立映射,得到p

p<-ggplot(data,aes(time,OTUs,

fill=phylum,

color=phylum,

label=phylum))

p

#加入geom_stream函数绘制基础河流图,得到p1

#但因数据的最大最小值相差过大,此时ggstream默认参数的出图效果非常奇怪:

p1<-p+geom_stream

p1

#接下来进行重要参数调整,下面两个参数会直接影响河流图的最终效果:

#extra_span:调整河流整体宽度,适合数据最大最小值相差巨大时进行调整;

#bw:核密度估计的宽带,即河流的“波峰”,数值越高越平缓;

p2<-p+geom_stream(extra_span=1.1,bw=0.75)

p2

#根据需求选择河流图类型(官方提供三种样式:mirror、ridge、proportional,默认为mirror)

#mirror:纵轴呈“镜像”,河流图双向波动(不做更改默认为此选项):

p2

#ridge:纵轴起点从0开始,河流图单向波动:

p3<-p+geom_stream(extra_span=1.1,bw=0.75, type = c( "ridge"))

p3

#proportional:百分比型面积堆叠河流图:

p4<-p+geom_stream(extra_span=1.1,bw=0.75, type = c( "proportional"))

p4

#替换原始配色(使用RColorBrewer包):

display.brewer. all#查看此包的全部配色方案

mycolor<-brewer.pal(9, "Set3")#选择Set3主题色板

p5<-p2+scale_fill_manual(values=rev(mycolor))+

scale_color_manual(values=rev(mycolor))

p5

#再换一种配色:

mycolor2<-brewer.pal(9, "Spectral")#选择Spectral主题色板

p6<-p2+scale_fill_manual(values=rev(mycolor2))+

scale_color_manual(values=rev(mycolor2))

p6

#再换成“ridge”型河流图:

p6<-p3+scale_fill_manual(values=rev(mycolor2))+

scale_color_manual(values=rev(mycolor2))

p6

#自定义主题:

top.mar=0.2

right.mar=0.2

bottom.mar=0.2

left.mar=0.2

mytheme<-theme_classic+

theme(text=element_text(family = "sans",color = "gray30",size = 12),

axis.line = element_line(size = 0.6,color = "gray30"),

axis.ticks = element_line(size = 0.6,color = "gray30"),

axis.ticks.length = unit(1.5,units = "mm"),

plot.margin=unit(x=c(top.mar,right.mar,bottom.mar,left.mar),units= "inches"))

p7<-p6+mytheme

p7

#将绘图区域对齐到坐标原点,限制x轴范围避免标签溢出:

p8<-p7+scale_x_continuous(expand=c(0,0),limits=c(5,9))

+ scale_y_continuous(expand=c(0,0))

p8

#“mirror”型河流图推荐的主题:

p5+theme_minimal+theme(panel.grid.minor=element_blank)

#百分比型面积堆叠河流图推荐的主题:

p9<-p4+scale_fill_manual(values=rev(mycolor2))+

scale_color_manual(values=rev(mycolor2))

p9+theme_bw+theme(panel.grid=element_blank)+

scale_x_continuous(expand=c(0,0),limits=c(5,9))+

scale_y_continuous(expand=c(0,0))

Over!

2. streamgraph绘制河流图

篇幅受限,我们简单过一下,大家有兴趣自己再去琢磨琢磨。

#包的安装和载入+创建数据集:

install.packages('devtools')

devtools::install_github( "hrbrmstr/streamgraph")

library(streamgraph)

data<-data.frame(

time=rep(seq(2001,2021),each=10),

name=rep(letters[1:10],21),

value=sample(seq(0,1,0.001),210))

# 直接绘图,默认出图为与ggstream相同的“波浪状”,但这个包还可以调整为“折线状”或“者阶梯状”;

p1<-streamgraph(data,key= "name",value= "value",date= "time")

p1

#通过interpolate="linear"参数设置为折线状:

p2<-streamgraph(data,key= "name",value= "value",date= "time",interpolate= "linear")

p2

#通过interpolate="step"参数设置为阶梯状:

p3<-streamgraph(data,key= "name",value= "value",date= "time",interpolate= "step")

p3

#与ggstream相同,还可以调整为单向波动的堆叠面积图和百分比型堆叠面积图:

#默认参数为offset="silhouette";

#单向波动的面积堆叠图:

p4<-streamgraph(data, key= "name",value= "value",date= "time",interpolate= "linear",

offset= "zero")

p4

#百分比型面积堆叠图:

p5<-streamgraph(data,key= "name",value= "value",date= "time",interpolate= "step",offset= "expand")

p5

Over!

3. Excel绘制面积堆叠图

首先整理好自己的数据:

选中作图数据,工具栏选择插入—图表—面积图—堆积面积图/百分比堆积面积图即可。

插入后如下。根据需求调整颜色、字体、坐标轴、标签等参数,这里就不在赘述啦,相信Excel大家用的都棒棒滴~最后,使用XL Toolbox NG插件将图片输出为可自定义分辨率和图片格式类型的符合期刊投稿需求的高清图片即可(插件用法见推文: 《如何一步到位,将Excel图表输出成符合期刊需求的高分辨率图片?》 )。

转自:基迪奥

最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情