我有包含Venn图值的表,我试图将这些值读入R并解析,以便用VennDiagram包绘制图。我的桌子是这样的:
H3K27AC.bed H3K4ME3.bed gencode.bed Total Name
X 19184 gencode.bed
X 6843 H3K4ME3.bed
X X 3942 H3K4ME3.bed|gencode.bed
X 5097 H3K27AC.bed
X X 1262 H3K27AC.bed|gencode.bed
X X 4208 H3K27AC.bed|H3K4ME3.bed
X X X 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed我可以把这张桌子读成这样的数据:
> venn_table_df<-read.table(venn_table_file,header = TRUE,sep = "\t",stringsAsFactors = FALSE)
> venn_table_df
H3K27AC.bed H3K4ME3.bed gencode.bed Total Name
1 X 19184 gencode.bed
2 X 6843 H3K4ME3.bed
3 X X 3942 H3K4ME3.bed|gencode.bed
4 X 5097 H3K27AC.bed
5 X X 1262 H3K27AC.bed|gencode.bed
6 X X 4208 H3K27AC.bed|H3K4ME3.bed
7 X X X 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed我可以像下面这样从表中获取venn图的类别
> venn_categories<-colnames(venn_table_df)[!colnames(venn_table_df) %in% c("Total","Name")]
> venn_categories
[1] "H3K27AC.bed" "H3K4ME3.bed" "gencode.bed"我甚至可以制作一个简单易懂的汇总表,比如:
> venn_summary<-venn_table_df[!colnames(venn_table_df) %in% venn_categories]
> venn_summary
Total Name
1 19184 gencode.bed
2 6843 H3K4ME3.bed
3 3942 H3K4ME3.bed|gencode.bed
4 5097 H3K27AC.bed
5 1262 H3K27AC.bed|gencode.bed
6 4208 H3K27AC.bed|H3K4ME3.bed
7 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed但是,让我感到困惑的是如何将值从表中提取出来,并将它们正确地分配到venn图的区域。作为参考,三重venn函数如下所示:
n1<-5097
n2<-6843
n3<-19184
n12<-4208
n13<-1262
n23<-3942
n123<-9222
venn <-draw.triple.venn(area1=n1+n12+n13+n123,
area2=n2+n23+n12+n123,
area3=n3+n23+n13+n123,
n12=n12+n123,
n13=n13+n123,
n23=n23+n123,
n123=n123,
category=venn_categories,
fill=c('red','blue','green'),
alpha=c(rep(0.3,3)))但是很明显,这需要手动设置值,这是不可取的,因为我有很多这样的数据集,而且还需要扩展到4路和5路的venn。我如何才能得到R来为venn中的每个字段找到正确的值?我尝试了多种不同的方法,使用grep、grepl,并为匹配图中每个区域的类别的行设置数据,但这没有正确工作。有什么建议吗?顺便说一下,这些数据是从荷马软件包的mergePeaks程序输出的。
发布于 2019-01-10 12:01:59
如果有人发现这是有用的,现在有一个非常简单的过程,把这些数字变成一个近似成比例的Venn图。用nVennR包创建图表的方法之一是从头开始。正如在格列奈特中所解释的,每个区域的值都是按特定顺序输入的,这恰好与表中的值相同。唯一的区别是,nVennR在开始时需要多一个值,对应于外部区域(这个值应该是0,但无论如何它将被忽略)。这使得这个过程非常容易:
> vt <- read.table('clipboard', header = T)
> vt
H3K27AC.bed H3K4ME3.bed gencode.bed Total Name
1 0 0 X 19184 gencode.bed
2 0 X 0 6843 H3K4ME3.bed
3 0 X X 3942 H3K4ME3.bed|gencode.bed
4 X 0 0 5097 H3K27AC.bed
5 X 0 X 1262 H3K27AC.bed|gencode.bed
6 X X 0 4208 H3K27AC.bed|H3K4ME3.bed
7 X X X 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed
> myV <- createVennObj(nSets = 3, sNames = c('H3K27Ac', 'H3K4ME3', 'gencode'), sSizes = c(0, vt$Total))
> vp <- plotVenn(nVennObj = myV)其结果是:

这个过程的另一个优点是它可以扩展到更多的组。
https://stackoverflow.com/questions/37034871
复制相似问题