如何在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
相关产品推荐
相关产品推荐

