如何实现R语言三元维恩图的比例化大小绘制?
解决三元维恩图比例化的问题
VennDiagram包的draw.triple.venn()默认生成对称的三元维恩图,不会根据输入的面积数值自动调整圆的大小比例。要生成圆大小匹配实际集合面积的比例化维恩图,推荐使用以下两种工具包:
方案一:用eulerr包(推荐,精准比例)
eulerr专门用于生成比例化的欧拉图(可完美适配你的集合嵌套逻辑),步骤如下:
# 首次使用需安装包 install.packages("eulerr") library(eulerr) # 定义集合及交集的大小 set_info <- list( "All Extractables" = 2125, "CERAPP" = 805, "ToxCast" = 387, "All Extractables&CERAPP" = 805, "All Extractables&ToxCast" = 387, "CERAPP&ToxCast" = 385, "All Extractables&CERAPP&ToxCast" = 385 ) # 拟合比例化模型 fit <- euler(set_info) # 绘制比例化图 plot(fit, fills = c("white", "red", "yellow"), edges = "black", labels = list(fontsize = 12), quantities = list(fontsize = 10))
这段代码会根据你输入的集合大小,自动调整每个圆的尺寸和位置,准确呈现CERAPP、ToxCast完全包含在All Extractables中,且两者有部分重叠的关系。
方案二:用ggVennDiagram包(ggplot2风格)
如果需要ggplot2生态的可视化风格,可使用ggVennDiagram,通过模拟集合元素来实现比例化:
# 首次使用需安装包 install.packages("ggVennDiagram") library(ggVennDiagram) library(ggplot2) # 模拟集合元素,匹配你的面积和交集逻辑 venn_elements <- list( "All Extractables" = paste0("item_", 1:2125), "CERAPP" = paste0("item_", (2125 - 805 + 1):2125), # 完全包含在大集合中 "ToxCast" = c(paste0("item_", (2125 - 385 + 1):2125), # 和CERAPP重叠的385个元素 paste0("unique_tox_", 1:2)) # 仅属于ToxCast的2个元素 ) # 绘制比例化维恩图 ggVennDiagram(venn_elements, fill_color = c("white", "red", "yellow"), stroke_color = "black") + theme(legend.position = "none")
补充说明
VennDiagram包的draw.triple.venn()本身不支持比例化调整,它的设计目标是生成美观的对称维恩图,而非严格匹配数据比例的可视化,因此换用上述工具包是更合理的选择。
内容的提问来源于stack exchange,提问作者Zaman Muhammad Asad
相关产品推荐
相关产品推荐

