美文网首页
R包介绍:使用ggalluvial绘制共线性图(alluvial

R包介绍:使用ggalluvial绘制共线性图(alluvial

作者: WJ的生信小院 | 来源:发表于2022-08-14 08:26 被阅读0次

    一 导言

    共线性图作为新近出现的一种数据可视化方式,以其直观、形象的方式受到大家的普遍欢迎,也在众多文章中获得了应用。该图的核心理念就是将不同时期间同一批数据的关系connect起来,即不同阶段中所有样品在众多分类间的流动情况(流动或许表述的不是那么准确,但的确是这样一种形式)。考虑到部分读者对这种图的需求,因此本推文将以代码加解说的方式展示如何进行这类图片的绘制(有没有很贴心)。

    二 R包使用

    首先,我们需要做的就是加载对应的R包

    library(ggalluvial)

    随后,设置命令行参数的意义。这里是为了方便后续直接调用,其中argfilename是笔者放置参数的文件。

    Args <- commandArgs()

    inputfilename<-Args[6]

    argfilename<-Args[7]

    outputfilename<-Args[8]

    划重点:这里需要强调一下输入文件(inputfilename)的格式及其对应的意义。其中survey用于表示不同的时期,subject表示相应的样品编号,response则表示该样品编号在survey时期应该归属于哪个respones种类中。下文文件仅展示部分。

    survey freq subject response

    ms153_NSA 48 1 Always

    ms153_NSA 9 2 Always

    ms153_NSA 66 3 Always

    ms153_NSA 1 4 Always

    ms153_NSA 11 5 Always

    ms153_NSA 1 6 Always

    ms153_NSA 5 7 Always

    ms153_NSA 4 8 Always

    ms153_NSA 24 9 Missing

    对应的参数文件为

    pic_height_num 2400

    pic_width_num 2400

    pic_res_num 300

    col_type transparent

    alpha_size 0.5

    cex_size 0.7

    cat_cex_size 0.7

    margin_size 0.05

    rotation_degree_num 0

    list_name_1 list1

    list_name_2 list2

    list_name_3 list3

    list_name_4 list4

    list_name_5 list5

    colour_1 blue

    colour_2 green

    colour_3 yellow

    colour_4 purple

    colour_5 red

    mar_1_size 0

    mar_2_size 0

    mar_3_size 0

    mar_4_size 0

    其次,通过命令行参数读取对应的数据

    alluvial_table=read.csv(inputfilename, sep="\t", row.names=None)plot_args<-read.table(argfilename,sep="\t",header=F,row.names = 1)

    对于输出图片而言,我们需要的是确定输出图片的长、宽、像素、边界的大小(当然,读者可以自行设定调节参数用于绘制符合自己要求的数据),本文则将参数写到对应的参数文件中,再以参数文件的解析获取对应的图片输出数据

    alluvial_table=read.csv(inputfilename, sep="\t", header=T)

    plot_args<-read.table(argfilename,sep="\t",header=F,row.names = 1)

    plot_args<-as.data.frame(t(plot_args))

    pic_height_num=as.numeric(as.vector(plot_args$pic_height_num)[1])

    pic_width_num=as.numeric(as.vector(plot_args$pic_width_num)[1])

    pic_res_num=as.numeric(as.vector(plot_args$pic_res_num)[1])

    mar_1_size=as.numeric(as.vector(plot_args$mar_1_size)[1])

    mar_2_size=as.numeric(as.vector(plot_args$mar_2_size)[1])

    mar_3_size=as.numeric(as.vector(plot_args$mar_3_size)[1])

    mar_4_size=as.numeric(as.vector(plot_args$mar_4_size)[1])

    png(outputfilename, width = pic_width_num, height = pic_height_num, res = pic_res_num)

    par(mar=c(mar_1_size,mar_2_size,mar_3_size,mar_4_size))

    再次,通过相应的代码完成图片的绘制。这里的绘图参数都是ggplot2的常见参数,读者可以从官方文档中得到详细解答,笔者在这里就不进行赘述了。至于输入文件的内容及其意义详见本文开端中的划重点’部分

    alluvial_plot=ggplot(alluvial_table,aes(x = survey, stratum = response, alluvium = subject,y = freq,fill = response, label = response))

    alluvial_plot=alluvial_plot+scale_x_discrete(expand = c(.1, .1))

    alluvial_plot=alluvial_plot+geom_flow()

    alluvial_plot=alluvial_plot+geom_stratum(alpha = .5)

    alluvial_plot=alluvial_plot+geom_text(stat = "stratum", size = 3)

    alluvial_plot=alluvial_plot+theme(legend.position = "none")

    alluvial_plot=alluvial_plot+theme_bw()

    alluvial_plot=alluvial_plot+theme(panel.grid=element_blank())

    alluvial_plot=alluvial_plot+theme(axis.text = element_blank())

    alluvial_plot=alluvial_plot+theme(axis.ticks = element_blank())

    alluvial_plot=alluvial_plot+theme(panel.border = element_blank())

    alluvial_plot=alluvial_plot+ggtitle("vaccination survey responses at three points in time")

    alluvial_plot

    dev.off()

    最后,一张完美的共线性图随即诞生(手动鼓掌)。

    图1 共线性图

    三 惯例小结

    其实这一图片绘制充分体现了可视化的理念吧,也就是所见即所得。虽说这一图片的实现并不是特别困难,但是能够想到使用这一形式表示图片,已经是在可视化的方向上前进了一大步了。

    另外,进一步推广一下我开发的相关软件,Multi-omics Hammer软件和Multi-omics Visual软件,也欢迎大家关注并多提意见。另外,因为输入文件比较长,我这里就截取了一部分,详细的话可以见个人介绍WX

    以下为相关软件地址:

    Multi-omics Hammer软件地址:https://github.com/wangjun258/Multi-omics-Hammer

    Multi-omics Visual软件地址:https://github.com/wangjun258/Multi_omics_Visual

    相关文章

      网友评论

          本文标题:R包介绍:使用ggalluvial绘制共线性图(alluvial

          本文链接:https://www.haomeiwen.com/subject/aticgrtx.html