序列变异的柱状图可视化
写在前面的
在数据可视化的过程中,我曾追求使用复杂高端的图表去呈现数据的分布,后来感觉这种为了视觉效果而强行赋予的可视化传达数据核心信息的过程中极易受到复杂外形的限制,从而增加其他人试图理解图表的复杂度。根据奥卡姆剃刀原则,简单往往是最好的,所以不知从何时起,我开始专注于用简单图像去反映复杂数据,曾经喜欢的circos图、网络图逐渐被热图或者更简单的箱线图和柱状图取代。因为这些简单图形往往能直观传达数据的核心面,能增加我与其他人沟通讨论的效率。
序列的变异统计柱状图
最近我有一批关于一段寡聚核酸序列经过incubate后的变异数据分析。我曾考虑过用seqlogo的方式可视化数据。尽管这种可视化方法能通过ATCG四种字符串的大小变化来揭示特定位点下核酸的变异程度,但是seqlogo在对于高频变异序列的可视化中往往无法传递这段序列原始状态的序列信息。综合权衡之下,我觉得用柱状图的方式展示我的序列变异程度,但是柱状图依然缺乏传达原始序列状态的短板。不过本着缺什么就加什么的想法,我还是试出了在柱状图中添加序列信息的方法。下面我用一个示例数据完成展示:
library(ggplot2)enzymemark<-"ACGTGACGTCGGACTGAGCT"data<-data.frame(site=c(-10:9), varnum=sample(0:100, length(-10:9),replace=T))matches <- regmatches(enzymemark, gregexpr("[ATCG]+", enzymemark))data<-data[1:20,]data$site<-c(-10:-1, 1:10)data$site<-as.character(data$site)dna_sequence<-strsplit(matches[[1]][1], "")[[1]]dna_colors <- c(rep("#00BFFF", 10), rep("red", 10))ggplot(data, aes(x = site, y = varnum)) +geom_col(fill = "orange", color = "orange") +labs(x = "Site", y = "Number of mutation", title = "Mutation landscape of seq-footprint") +scale_x_discrete(labels = data$site) +theme_bw()+theme_inhouse()+annotate("text",x = 1:length(dna_sequence),y = -0.02*max(data$varnum), #y axis of sequence to be labeledlabel = dna_sequence,color = dna_colors,size = 6,vjust = 1)
上面的代码中,我使用随机函数生成了一个两列列表,分别是序列的位点和对应位点的变异数量。因为我的序列中心恰好是一个酶切位点,为了在柱状图中清晰展示哪些变异在酶切位点的5'上游,哪些在5'下游,我分别用蓝色和红色注释了酶切位点前后的序列。相比之下,这种展示方式能更聚焦在探索原始序列哪些位置的变异程度高,如果想继续深入挖掘变异方向,也可以修改代码为使用堆积图方式将ATCG变异比例展示。

