使用R或Excel重叠图形

时间:2011-06-05 17:49:08

标签: excel r graph overlap

我有以下矩阵,我想用R(最好)或Excel绘制重叠图。

    a       b       c
a   1       0.5     0.7
b   0.5     1       0.4
c   0.7     0.4     1

例如,上表显示ab有50%重叠,而ac有70%。

1 个答案:

答案 0 :(得分:0)

如果您想要重叠,那么您错过了一个数字 - 重叠所有三个:abc

Aniko写评论你可以使用维恩图,例如Vennerable from R-forge

安装需要BioConductor的一些软件包:

source("http://bioconductor.org/biocLite.R")
biocLite(c("graph", "RBGL", "gtools", "xtable"))
install.packages("Vennerable", repos="http://R-Forge.R-project.org")

您正确准备数据:

require(Vennerable)
x <- Venn(
    SetNames = c("a", "b", "c"),
    Weight = c(`100`=1,   `010`=1,   `001`=1,
               `110`=0.5, `101`=0.7, `011`=0.4,
               `111`=.5) # I made this up cause your question miss it
)

瞧瞧:

plot(x, doWeights=TRUE)

Venn diagram


一些额外的解释。

Vennerable包的数据结构需要提供集合名称(在您的案例中为"a""b""c")以及每个相交的频率/比例。此0/1名称标识子集:1表示“在集合中”,0表示“未在集合中”。例如:

  • 100表示a,不在b,不在c
  • 011表示不在abc

所以111表示所有三个集合,在矩阵中缺少,并且无法在那里添加。对于你的样本数据,当&amp; b有0.7重叠而b&amp; c有0.4意味着至少0.1同时有三组(或者我错过了这个数字的解释)。 (注意:我认为我高估了0.5,因为它应该低于0.4)

您可以在创建矩阵之前将数据准备到维恩图,例如:

X <- list(
    a = c("One", "Two", "Three"),
    b = c("One", "Three", "Four", "Five", "Seven"),
    c = c("Three", "Five", "Eight", "Nine", "Ten")
)

x <- Venn(X)
x
# A Venn object on 3 sets named
# a,b,c 
# 000 100 010 110 001 101 011 111 
#   0   1   2   1   3   0   1   1 
plot(x, doWeights=TRUE)