基于自定义类别修改ggVennDiagram图例(非计数/单个交集)
自定义韦恩图图例(仅显示指定类别)
你已为韦恩图的交集区域按Exclude、Sample、All三个自定义类别设置颜色,但当前图例会列出所有交集项(如A、A..B等),以下是修改方案,可生成仅包含三个目标类别的简洁图例:
修改后的代码
library(ggplot2) library(ggVennDiagram) # 生成示例数据 x <- list(A = sample(1:50, 30), B = sample(10:60, 45), C = sample(1:100, 60), D = sample(1:50, 30)) # 初始化韦恩图,设置计数标签 v <- ggVennDiagram(x, label = 'count', label_alpha = 0) + scale_color_manual(values = rep('black', 4)) # 定义每个交集区域对应的自定义类别 category_mapping <- c( A = 'Exclude', B = 'Exclude', C = 'Exclude', D = 'Exclude', A..B = 'Exclude', A..C = 'Sample', A..D = 'All', B..C = 'All', B..D = 'All', C..D = 'Exclude', A..B..C = 'Sample', A..B..D = 'Sample', A..C..D = 'All', B..C..D = 'All', A..B..C..D = 'Sample' ) # 提取韦恩图数据集,添加类别列 venn_data <- v$data[[1]] venn_data$category <- category_mapping[venn_data$name] # 更新图层的fill映射为自定义类别 v$data[[1]] <- venn_data v$layers[[1]]$mapping <- aes(fill = category) # 定义类别与颜色的对应关系,生成最终图 color_mapping <- c(Exclude = 'white', Sample = 'skyblue', All = 'lightsalmon') v + scale_fill_manual(values = color_mapping, name = "类别")
关键说明
- 先通过
category_mapping将每个交集项映射到三个自定义类别,替代直接给每个交集赋值颜色的方式 - 提取韦恩图的内置数据集,添加
category列,让每个区域关联到所属类别 - 将图层的
fill映射从原始的name(交集名称)改为category(自定义类别),这样图例就会基于类别生成 - 最后用
scale_fill_manual指定三个类别的颜色,可通过name参数自定义图例标题
内容的提问来源于stack exchange,提问作者dGroat
相关产品推荐
相关产品推荐

