在 VennDiagram 中强制标签位于左侧

Force label to the left in VennDiagram

我正在尝试使用 R VennDiagram 包 (v 1.6.20) 生成维恩图,函数为 draw.pairwise.venn,其中:

我有两个类别 "Method_1" 和 "Method_2"(因此 draw.pairwise.venn)
对于 Method_2,其所有标签都包含在 Method_1.

我的问题是,在绘制维恩图时,特定于 Method_1 的标签显示在维恩图的右侧,这很令人困惑,因为如果您不注意颜色,您可能认为它们对应于 Method_2 个标签。 See figure 1

Ps : 切换类别(将 Method_1 放在右边)不是一个选项,因为在这项研究中我们制作了许多维恩图并希望左边总是 Method_1,右边总是 Method_2。

图 1 的代码:

M1 <- c("toto", "tata", "titi")
M2 <- "toto"
if (all(M2 %in% M1)) {
    v <- draw.pairwise.venn(
      area1 = 100,
      area2 = 35,
      cross.area = 35,
      category = c("Method_1", "Method_2"),
      fill = c("navajowhite", "lightskyblue1"),
      lty = "blank",
      cex = 1.1,
      cat.cex = 2.1,
      cat.dist = c(0.03, 0.112),
      cat.pos = c(330, 30),
      margin = 0.04,
      cat.col = c("sienna4", "darkblue")
    )

    v[[5]]$label <- paste(intersect(M1, M2), collapse = "\n")
    v[[6]]$label <- paste(setdiff(M1, M2), collapse = "\n")
    grid.newpage()
    grid.draw(v)
}

我确实尝试用 $hjust 和 $just 玩弄维恩右侧的标签。
$hjust 的行为与预期一致,但 $just 并非如此。 See figure 2

> str(v[[6]])
List of 11
$ label : chr "tata\ntiti"
$ x : 'unit' num 0.828npc
..- attr(, "valid.unit")= int 0
..- attr(
, "unit")= chr "npc"
$ y
: 'unit' num 0.5npc
..- attr(, "valid.unit")= int 0
..- attr(
, "unit")= chr "npc"
$ just : chr "centre"
$ hjust : NULL
$ vjust : NULL
$ rot : num 0
$ check.overlap: logi FALSE
$ name : chr "GRID.text.431"
$ gp :List of 5
..$ col : chr "black"
..$ cex : num 1.1
..$ fontface : chr "plain"
..$ fontfamily: chr "serif"
..$ font : Named int 1
.. ..- attr(, "names")= chr "plain"
..- attr(
, "class")= chr "gpar"
$ vp : NULL
- attr(*, "class")= chr [1:3] "text" "grob" "gDesc"

图 2 的更新:

v[[6]]$hjust <- 17 # Default = NULL
v[[6]]$just <- "left" # Default = "centre"
grid.newpage()
grid.draw(v)

如何为 Method_1 标签强制 "good" 左对齐?

justhjust 做的基本一样。如果我理解正确,您想独立于理由更改标签的位置。您可以使用 x 变量来做到这一点:

M1 <- c("toto", "tata", "titi")
M2 <- "toto"
if (all(M2 %in% M1)) {
    v <- draw.pairwise.venn(
      area1 = 100,
      area2 = 35,
      cross.area = 35,
      category = c("Method_1", "Method_2"),
      fill = c("navajowhite", "lightskyblue1"),
      lty = "blank",
      cex = 1.1,
      cat.cex = 2.1,
      cat.dist = c(0.03, 0.112),
      cat.pos = c(330, 30),
      margin = 0.04,
      cat.col = c("sienna4", "darkblue")
    )

    v[[5]]$label <- paste(intersect(M1, M2), collapse = "\n")
    v[[6]]$label <- paste(setdiff(M1, M2), collapse = "\n")
    v[[6]]$just <- "left"
    v[[6]]$x <- unit(0.15, 'npc')
    grid.newpage()
    grid.draw(v)
}

您可以更改或删除行 v[[6]]$just <- "left" 以在 v[[6]] 中实现您想要的相对分布。