首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析venn表在R中创建Venn图

解析venn表在R中创建Venn图
EN

Stack Overflow用户
提问于 2016-05-04 18:02:29
回答 1查看 1.5K关注 0票数 1

我有包含Venn图值的表,我试图将这些值读入R并解析,以便用VennDiagram包绘制图。我的桌子是这样的:

代码语言:javascript
复制
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

我可以把这张桌子读成这样的数据:

代码语言:javascript
复制
> 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图的类别

代码语言:javascript
复制
> venn_categories<-colnames(venn_table_df)[!colnames(venn_table_df) %in% c("Total","Name")] 
> venn_categories
[1] "H3K27AC.bed" "H3K4ME3.bed" "gencode.bed"

我甚至可以制作一个简单易懂的汇总表,比如:

代码语言:javascript
复制
> 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函数如下所示:

代码语言:javascript
复制
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中的每个字段找到正确的值?我尝试了多种不同的方法,使用grepgrepl,并为匹配图中每个区域的类别的行设置数据,但这没有正确工作。有什么建议吗?顺便说一下,这些数据是从荷马软件包的mergePeaks程序输出的。

EN

回答 1

Stack Overflow用户

发布于 2019-01-10 12:01:59

如果有人发现这是有用的,现在有一个非常简单的过程,把这些数字变成一个近似成比例的Venn图。用nVennR包创建图表的方法之一是从头开始。正如在格列奈特中所解释的,每个区域的值都是按特定顺序输入的,这恰好与表中的值相同。唯一的区别是,nVennR在开始时需要多一个值,对应于外部区域(这个值应该是0,但无论如何它将被忽略)。这使得这个过程非常容易:

代码语言:javascript
复制
> 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)

其结果是:

这个过程的另一个优点是它可以扩展到更多的组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37034871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档