You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中修改grid::grob对象:调整eulerr图文本与添加标签

解决方案

1. 将p1中的数值转换为百分比格式

eulerr生成的grob对象里,数量文本存放在text类型的子元素中,我们可以直接遍历修改这些文本,把浮点数转为百分比格式:

library(eulerr)
library(grid)

# 生成原始p1
p1 <- 
  euler(c("A" = 0.205, "B" = 0.137, "A&B" = 0.0513)) |> 
  plot(quantities = TRUE,
       fills = list(fill = c("lavenderblush2", 
                             "lightblue2", 
                             "lightsalmon")))

# 修改数值为百分比格式
for (i in seq_along(p1$children)) {
  if (inherits(p1$children[[i]], "text")) {
    num <- as.numeric(p1$children[[i]]$label)
    if (!is.na(num)) {
      # 保留1位小数,可根据需求调整为%.2f%%保留两位
      p1$children[[i]]$label <- sprintf("%.1f%%", num * 100)
    }
  }
}

# 绘制修改后的p1
grid.draw(p1)

2. 给p2添加自定义标签

基于grid包,有两种方式可以实现:

方式1:绘制后直接添加标签

# 生成原始p2
p2 <-
  euler(c("A" = 0.205, "B" = 0.137, "A&B" = 0.0513)) |> 
  plot(quantities = FALSE,
       fills = list(fill = c("#9195F6", 
                             "#9195F6", 
                             "#9195F6")))

# 新建绘图页并绘制p2
grid.newpage()
grid.draw(p2)

# 添加自定义标签,x/y为0-1的相对坐标,可根据图表调整
grid.text("仅A", x = 0.35, y = 0.5, gp = gpar(fontsize = 12))
grid.text("仅B", x = 0.65, y = 0.5, gp = gpar(fontsize = 12))
grid.text("A∩B", x = 0.5, y = 0.5, gp = gpar(fontsize = 12, fontface = "bold"))

方式2:将标签整合为一个grob对象

如果需要把标签和p2合并成一个整体grob,方便后续复用:

# 创建标签grob集合
labels <- gList(
  textGrob("仅A", x = 0.35, y = 0.5, gp = gpar(fontsize = 12)),
  textGrob("仅B", x = 0.65, y = 0.5, gp = gpar(fontsize = 12)),
  textGrob("A∩B", x = 0.5, y = 0.5, gp = gpar(fontsize = 12, fontface = "bold"))
)

# 合并p2与标签
p2_with_labels <- gTree(children = gList(p2, labels))

# 绘制合并后的grob
grid.draw(p2_with_labels)

内容的提问来源于stack exchange,提问作者Emman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:25:26