如何用ggVennDiagram基于自有手术技术数据集绘制3D韦恩图?
使用ggVennDiagram绘制带热图的3D韦恩图
问题原因
你之前的两种操作都不符合ggVennDiagram的输入规则:
- 直接传入0-1矩阵:函数默认将每一列视为独立元素集合,但你的数据是行代表样本、列代表样本是否属于对应手术集合,格式不匹配
- 手动构建计数列表:ggVennDiagram不接受键值对式的计数输入,它需要的是每个手术集合对应的元素(如患者行号)组成的列表
正确实现步骤
1. 构建符合要求的输入数据
先将每种手术技术对应的患者行号提取出来,组成集合列表:
# 还原你的数据集 surgery_df <- data.frame( ae.folds = c(rep(1,19), rep(1,8), 1,1), arytenoid.reduction = c(rep(0,19), rep(1,7), 0,1), epiglottopexy = c(rep(0,27), 1,1) ) # 生成集合列表:每个元素对应一种手术的患者行号 venn_list <- list( "ae.folds" = which(surgery_df$ae.folds == 1), "arytenoid.reduction" = which(surgery_df$arytenoid.reduction == 1), "epiglottopexy" = which(surgery_df$epiglottopexy == 1) )
2. 绘制3D韦恩图并启用热图效果
调用ggVennDiagram,通过参数设置3D模式和热图展示:
library(ggVennDiagram) ggVennDiagram(venn_list, type = "3d", # 启用3D韦恩图模式 show_heatmap = TRUE, # 开启热图展示计数高低 heatmap_color = c("#F5EFE7", "#4F709C") # 自定义热图渐变颜色 ) + theme(legend.position = "right") # 调整图例位置
结果说明
- 热图颜色深浅对应区域的患者计数:比如
ae.folds单独区域有19个患者,颜色最深;三种手术交集区域有1个患者,颜色最浅 - 3D效果让各手术的组合区域更直观,能清晰呈现手术技术的使用变化
内容的提问来源于stack exchange,提问作者Dr Bear
相关产品推荐
相关产品推荐

