R 标签不匹配中的维恩图



我使用下面的代码生成了一个带有标签的维恩图:

v <- venn.diagram(list(ISG15=d1, USP18=d2),
fill = c("orange", "blue"),
alpha = c(0.5, 0.5), cat.cex = 3, cex=1.5,
filename=NULL)
# have a look at the default plot
grid.newpage()
grid.draw(v)
# have a look at the names in the plot object v
lapply(v,  names)
# We are interested in the labels
lapply(v, function(i) i$label)
# Over-write labels (5 to 7 chosen by manual check of labels)
# in foo only
v[[5]]$label  <- paste(setdiff(d1, d2), collapse="n")  
# in baa only
v[[6]]$label <- paste(setdiff(d2, d1)  , collapse="n")  
# intesection
v[[7]]$label <- paste(intersect(d1, d2), collapse="n") 

理想情况下,我假设d1(我的数据集中的ISG15(将在左侧,d2(UPS18(在右侧。但实际上 d2 在左侧,这导致我的标签不匹配。我不明白原因(可能是因为 d1 有 25 个元素,d2 有 21 个元素?我不知道(。我错过了那里吗?

我查看了源代码,发现集合确实是按大小排序的:

if (!inverted) {
tmp1 <- max(area1, area2);
tmp2 <- min(area1, area2);
if (tmp1 != area1) { list.switch <- TRUE; }
area1 <- tmp1;
area2 <- tmp2;
r1 <- sqrt(area1 / pi);
r2 <- sqrt(area2 / pi);
if (r2 == 0) {r2 <- 0.5*r1 }
shrink.factor <- max.circle.size / r1;
}
else {
tmp1 <- max(area1, area2);
tmp2 <- min(area1, area2);
if (tmp1 != area1) { list.switch <- TRUE; }
area1 <- tmp1;
area2 <- tmp2;
r1 <- sqrt(area1 / pi);
r2 <- sqrt(area2 / pi);
if (r1 == 0) {r1 <- 0.5*r2 }
shrink.factor <- max.circle.size / r2;
}

以一种非常复杂的方式,这将一个list.switch变量设置为true如果area1不是最大的变量。您可以将inverted=true传递给函数,但这意味着您必须跟踪哪个集更大,并且仅在适当时才应用标志。 但是,您可能还需要考虑其他选项,如本线程中所述。

最新更新