首页 > 解决方案 > 在欧拉图中绘制带有分割法线和斜体面的标签 (euler)

问题描述

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"))
       )

在此处输入图像描述

我需要在标签中有斜体字体,但只是部分。我希望第三个标签的格式类似于标题:哦,了。

我在设置时尝试了 , , , , 的各种paste排列expressionbquotesubstitute无济于事label =

想法?

标签: reulerr

解决方案


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

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)

带有更改标签的维恩图

编辑:要找到需要编辑的 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

通过反复试验,我发现这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)
)

Wheretag.label.用作文本标签的前缀。


推荐阅读