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

如何在ggVennDiagram/ggplot中显示Item而非计数并清除无效标签

ggVennDiagram 韦恩图标签优化方案

1. 直接调用ggVennDiagram时移除无交集的"0 (0%)"标签

默认情况下,无元素的交集区域会显示"0 (0%)"标签,我们可以通过提前获取韦恩图数据并自定义标签来隐藏这些内容:

library(ggVennDiagram)

set.seed(0)
small_list <- lapply(sample(0:10, size = 4), function(x){
  sample(letters,x)
})
names(small_list) <- c("Mercury", "Venus", "Earth", "Mars")

# 基础绘图:隐藏0值标签
venn_data <- get_venn_data(small_list)
# 将count为0的标签设为空字符串
venn_data$label <- ifelse(venn_data$count == 0, "", paste0(venn_data$count, " (", venn_data$percent, "%)"))

ggVennDiagram(small_list, label_alpha = 0, label = venn_data$label)

# 显示交集元素时的处理
venn_intersect_data <- get_venn_data(small_list, show_intersect = TRUE)
# 空交集的item设为空
venn_intersect_data$label <- ifelse(venn_intersect_data$count == 0, "", venn_intersect_data$item)

ggVennDiagram(small_list, 
              category.names = LETTERS[1:4], 
              show_intersect = TRUE,
              label = venn_intersect_data$label)

2. 基于ggplot手动绘图的标签处理

移除item标签中的c(、)和引号

移除无交集区域的"character(0)"标签

通过处理venn_region输出的数据,对item列做字符串清洗即可:

venn <- Venn(small_list)
data <- process_data(venn)

# 处理区域数据的item字段
region_data <- venn_region(data)
# 替换掉不需要的符号
region_data$item <- gsub("c\\(|\\)|\"", "", region_data$item)
# 将空交集的"character(0)"转为空字符串
region_data$item <- ifelse(region_data$item == "character(0)", "", region_data$item)

# 绘制优化后的韦恩图
ggplot() +
  geom_sf(aes(fill = count), data = region_data) +
  geom_sf(aes(color = id), data = venn_setedge(data), show.legend = FALSE) +
  geom_sf_text(aes(label = name), data = venn_setlabel(data)) +
  geom_sf_label(aes(label = item), data = region_data) +
  theme_void()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:00:54