You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:10:27