在欧拉图中绘制带有拆分法线和斜体面的标签 (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"))
)
我需要在标签中使用斜体,但只是部分。我希望第三个标签的格式像标题一样:哦,对。
我尝试了paste
、expression
、bquote
、substitute
的各种排列,同时设置label =
但无济于事。
想法?
创建维恩图后,您可以尝试使用 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)
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.
用作文本标签的前缀。
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
、expression
、bquote
、substitute
的各种排列,同时设置label =
但无济于事。
想法?
创建维恩图后,您可以尝试使用 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)
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.
用作文本标签的前缀。