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 =,但都没有效果。
想法?
发布于 2020-10-30 12:46:51
您可以尝试在创建venn图之后使用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)
)其中,tag.label.用作文本标签的前缀。
https://stackoverflow.com/questions/64581189
复制相似问题