R包介紹:使用ggalluvial繪制共線性圖(alluvial)

一?導言

共線性圖作為新近出現的一種數據可視化方式,以其直觀、形象的方式受到大家的普遍歡迎,也在眾多文章中獲得了應用。該圖的核心理念就是將不同時期間同一批數據的關系connect起來,即不同階段中所有樣品在眾多分類間的流動情況(流動或許表述的不是那么準確,但的確是這樣一種形式)??紤]到部分讀者對這種圖的需求,因此本推文將以代碼加解說的方式展示如何進行這類圖片的繪制(有沒有很貼心)。

二?R包使用

首先,我們需要做的就是加載對應的R包

library(ggalluvial)

隨后,設置命令行參數的意義。這里是為了方便后續(xù)直接調用,其中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)

對于輸出圖片而言,我們需要的是確定輸出圖片的長、寬、像素、邊界的大?。ó斎?,讀者可以自行設定調節(jié)參數用于繪制符合自己要求的數據),本文則將參數寫到對應的參數文件中,再以參數文件的解析獲取對應的圖片輸出數據

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 共線性圖

三 慣例小結

其實這一圖片繪制充分體現了可視化的理念吧,也就是所見即所得。雖說這一圖片的實現并不是特別困難,但是能夠想到使用這一形式表示圖片,已經是在可視化的方向上前進了一大步了。

另外,進一步推廣一下我開發(fā)的相關軟件,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



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容