如何在R中绘制含重叠区域的饼图:展示双类别及交集占比
双集合重叠占比图(韦恩图)绘制方案
你需要的其实是双集合韦恩图(而非普通饼图),它能完美展示两个类别各自的占比及重叠交集的占比,完全匹配你给出的参考样式。以下是具体实现步骤:
第一步:统计核心数据
先从你的5条样本中提取三类人群的数量:
- 仅拥有sety:2个(行1、5),占比40%
- 仅拥有bety:2个(行2、3),占比40%
- 同时拥有两者:1个(行4),占比20%
注:你提到的60%是两类的总占比(sety总占比=仅sety+交集=60%;bety总占比=仅bety+交集=60%),韦恩图会通过圆的大小+重叠区域自动体现这个逻辑
方法一:Python实现(matplotlib-venn)
1. 安装依赖
pip install matplotlib matplotlib-venn
2. 代码示例
import matplotlib.pyplot as plt from matplotlib_venn import venn2 # 传入三类数量:仅sety、仅bety、交集 subset_counts = (2, 2, 1) # 绘制韦恩图 venn_plot = venn2(subsets=subset_counts, set_labels=('sety', 'bety')) # 自定义标注文本,添加占比说明 venn_plot.get_label_by_id('10').set_text('40%\n(仅sety)') venn_plot.get_label_by_id('01').set_text('40%\n(仅bety)') venn_plot.get_label_by_id('11').set_text('20%\n(同时拥有)') # 添加标题标注总样本数 plt.title(f'总样本量:5') plt.show()
运行后会生成两个重叠的彩色圆,重叠区域直观展示交集占比,圆的大小对应各自60%的总占比。
方法二:R语言实现(VennDiagram包)
1. 安装依赖
install.packages("VennDiagram")
2. 代码示例
library(VennDiagram) # 直接传入两个集合的样本索引(对应行号) set_list <- list( sety = c(1, 4, 5), bety = c(2, 3, 4) ) # 绘制韦恩图 venn_output <- venn.diagram( x = set_list, filename = NULL, # 直接在绘图窗口显示,不保存文件 fill = c("#4285F4", "#FBBC05"), alpha = 0.6, cat.cex = 1.2, main = "总样本量:5" ) # 显示图形 grid.draw(venn_output)
该代码会生成带半透明颜色的重叠圆,重叠区域清晰呈现交集的20%占比,两个圆的整体大小对应各自60%的总占比。
内容的提问来源于stack exchange,提问作者Kaoutar
相关产品推荐
相关产品推荐

