在欧拉图中绘制带有拆分法线和斜体面的标签 (eulerr)

Draw labels with split normal and italic faces in euler plot (eulerr)

eulerr 库使用以下代码生成图:

library(tidyverse)
library(eulerr)

matrix(data = c(T,T,T,F,T,F,T,F,T,T,T,F,F,F,T), ncol=3) %>%
  venn %>%
  plot(
    labels = c(
      "Left",
      "Right",
      "Oh, right"),
    main = expression("Oh,"~italic("right"))
       )

我需要在标签中使用斜体,但只是部分。我希望第三个标签的格式像标题一样:哦,

我尝试了pasteexpressionbquotesubstitute的各种排列,同时设置label =但无济于事。

想法?

创建维恩图后,您可以尝试使用 getGrobsetGrob 替换文本。

library(eulerr)

mat <- matrix(data = c(T,T,T,F,T,F,T,F,T,T,T,F,F,F,T), ncol=3)

v <- venn(mat)

p <- plot(v,
  labels = c(
    "Left",
    "Right",
    "Oh, right"),
  main = expression("Oh,"~italic("right"))
)

p

gg <- getGrob(p, "tag.label.3")
gg[[1]] <- expression(bold("Oh,"~bolditalic("yes!")))
setGrob(p, "tag.label.3", gg)

Edit:找到需要编辑的grob,可以使用grid.ls:

library(grid)

grid.ls(p)

这将列出您地块中的 grobs 名称,包括 tag.label.3:

euler.diagram
  main.grob
  canvas.grob
    diagram.grob.1
      fills.grob.1
      fills.grob.2
      fills.grob.3
      fills.grob.4
      fills.grob.5
      fills.grob.6
      fills.grob.7
      edges.grob
      tags
        tag.number.1
          tag.label.1
          tag.quantity.1
        tag.number.2
          tag.label.2
          tag.quantity.2
        tag.number.3
          tag.label.3
          tag.quantity.3
        tag.number.4
          GRID.null.1
          tag.quantity.4
        tag.number.5
          GRID.null.2
          tag.quantity.5
        tag.number.6
          GRID.null.3
          tag.quantity.6
        tag.number.7
          GRID.null.4
          tag.quantity.7

通过trial/error,我发现tag.label.3是我想要的文本。

此外,查看 eulerr 包,您有:

# from tag-grobs.R in eulerr package
labels_grob <- textGrob(
  label,
  x = unit(x, "native"),
  y = unit(y, "native"),
  rot = labels$rot[data$labels_par_id],
  gp = labels$gp[data$labels_par_id],
  name = paste0("tag.label.", data$labels_par_id)
)

其中 tag.label. 用作文本标签的前缀。