R语言ggVennDiagram绘制维恩图如何指定区域着色其余留白
R语言ggVennDiagram指定维恩图单个区域填充色实现方法
需求
使用R的ggVennDiagram包绘制维恩图时,需要实现指定区域自定义着色、其余区域保持空白的效果,例:将A ∩ B(集合A与B的交集)填充为红色,其余所有区域填充为白色。
当前使用代码
install.packages("ggplot2") install.packages("ggVennDiagram") library(ggplot2) library(ggVennDiagram) ## Creating a Venn Diagram # use data frame as input test = list(A = 1:1,B = 1:1) # create a Venn diagram and display all sets ggVennDiagram(test,label = c("none")) + scale_fill_gradient(low = "blue",high = "black") + theme(legend.position = "none",plot.background = element_rect(fill = "steelblue"), panel.border = element_rect(fill = NA),plot.margin = margin(10, 10, 10, 10))
当前代码运行效果:
解决方案
原代码使用scale_fill_gradient将区域包含的元素数量映射为连续填充色,无法单独指定单个区域的颜色。ggVennDiagram输出为标准ggplot对象,两集合维恩图的3个独立区域都带有对应的分类标识,直接使用scale_fill_manual给每个区域手动指定填充色即可实现需求。
两集合维恩图的区域标识对应关系:
A:仅属于集合A的独有区域B:仅属于集合B的独有区域A/B:A与B的交集区域
修改后的可运行代码:
library(ggplot2) library(ggVennDiagram) test = list(A = 1:1, B = 1:1) ggVennDiagram(test, label = "none") + # 手动指定各区域填充色:交集为红色,其余区域为白色 scale_fill_manual( values = c( "A" = "white", "B" = "white", "A/B" = "red" ) ) + theme( legend.position = "none", plot.background = element_rect(fill = "steelblue"), panel.border = element_rect(fill = NA), plot.margin = margin(10, 10, 10, 10) )
如果需要绘制3个及以上集合的维恩图,只需先运行基础绘图代码,查看图层数据里的name字段拿到所有区域标识,再按上述方法逐个指定填充色即可。
内容的提问来源于stack exchange,提问作者user19354736
相关产品推荐
相关产品推荐

