如何编辑ggVennDiagram交集填充区域 自定义颜色交集显示灰色如何解决
问题原因
venn_region(d)返回的区域数据中,仅单集合区域的name字段为A/B/C/D,交集区域的name为多集合组合值(如A&B、A&B&C等),你定义的颜色向量仅包含4个单集合的映射规则,交集区域无法匹配到对应颜色,就会显示默认灰色。- 你当前是将所有韦恩图区域作为独立几何对象统一填充,alpha仅调整单区域透明度,不会自动实现多集合颜色的叠加混合效果。
解决方案
改为逐个绘制每个集合的半透明填充层,利用ggplot2图层叠加特性自动生成交集的混合色,修改后的可运行代码如下:
library(ggVennDiagram) library(ggplot2) library(sf) genes <- paste0("gene",1:40) gene_list <- list( A = genes[1:10], B = genes[1:20], C = genes[5:15], D = genes[30:40] ) venn <- Venn(gene_list) d <- process_data(venn) col <- c(A = 'blue', B = 'red', C = 'green', D = 'orange') ggplot() + # 逐个添加集合填充层,实现颜色自动叠加 lapply(seq_along(gene_list), function(i) { geom_sf(data = venn_setedge(d)[i, ], fill = alpha(col[i], 0.2), color = NA) }) + # 绘制集合边界 geom_sf(aes(color = name), data = venn_setedge(d), linewidth = 1) + # 绘制集合名称标签 geom_sf_text(aes(label = name), data = venn_setlabel(d), size = 5) + # 绘制区域计数标签 geom_sf_text(aes(label = count), data = venn_region(d), size = 3.5) + # 自定义边界颜色 scale_color_manual(values = col) + theme_void() + # 隐藏冗余图例 guides(fill = "none")
运行上述代码即可得到交集为自定义颜色叠加效果的韦恩图,不会再出现灰色交集。
内容的提问来源于stack exchange,提问作者Archymedes
相关产品推荐
相关产品推荐

