【问题标题】:Venn diagram in R label mismatchR标签不匹配中的维恩图
【发布时间】:2020-05-14 20:36:21
【问题描述】:

我正在使用以下代码生成带有标签的维恩图:

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 个元素?我不知道)。我是不是错过了什么?

但是

【问题讨论】:

  • 请提供一些可以使用的数据。

标签: r venn-diagram


【解决方案1】:

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

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;
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2014-09-21
    • 2012-11-04
    • 1970-01-01
    相关资源
    最近更新 更多