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

如何用R的eulerr包绘制符合指定重叠比例的韦恩图?

问题分析

eulerr包的euler()函数通过最小化拟合误差生成韦恩图,当输入的集合大小与交集参数不完全符合圆形几何约束时,它会自动调整图形以接近输入值,这就是你设定的m被g覆盖的比例未精确呈现的原因。

解决方案:手动绘制精确符合覆盖比例的韦恩图

若需严格按照设定比例绘制,建议手动计算圆形的位置和半径,借助基础绘图工具或plotrix包实现:

步骤1:计算几何参数

根据面积与覆盖比例推导两个圆的半径及圆心距离:

# 安装并加载依赖包
if (!require(plotrix)) install.packages("plotrix")
library(plotrix)

# 你的原始参数
g_area <- 97.22
m_area <- 63.89
gm_overlap_prop_m <- 0.9015527
gm_area <- gm_overlap_prop_m * m_area

# 计算圆的半径(面积=πr² → r=√(面积/π))
r_g <- sqrt(g_area / pi)
r_m <- sqrt(m_area / pi)

# 定义交集面积计算函数(基于圆形几何公式)
intersection_area <- function(d, r1, r2) {
  if (d >= r1 + r2) return(0)
  if (d <= abs(r1 - r2)) return(min(r1^2, r2^2)*pi)
  theta1 <- acos((d^2 + r1^2 - r2^2)/(2*d*r1))
  theta2 <- acos((d^2 + r2^2 - r1^2)/(2*d*r2))
  (r1^2 * theta1 + r2^2 * theta2 - 0.5 * sqrt((-d + r1 + r2)*(d + r1 - r2)*(d - r1 + r2)*(d + r1 + r2))) * pi
}

# 求解圆心距离d:让交集面积等于目标值gm_area
target_diff <- function(d) intersection_area(d, r_g, r_m) - gm_area
sol <- uniroot(target_diff, interval = c(0, r_g + r_m))
center_dist <- sol$root

步骤2:绘制韦恩图

用计算出的参数绘制精确图形:

# 初始化绘图画布
plot(0, 0, type = "n", 
     xlim = c(-r_g - 1, r_g + 1), 
     ylim = c(-r_g - 1, r_g + 1), 
     axes = FALSE, xlab = "", ylab = "", 
     main = "Custom Venn Diagram with Exact Overlap")

# 绘制g圆(左侧)
draw.circle(-center_dist/2, 0, r_g, 
            col = adjustcolor("steelblue", alpha.f = 0.3), 
            border = "steelblue", lwd = 1.5)
# 绘制m圆(右侧)
draw.circle(center_dist/2, 0, r_m, 
            col = adjustcolor("coral", alpha.f = 0.3), 
            border = "coral", lwd = 1.5)

# 添加标签与数值
text(-center_dist/2, 0, labels = paste0("g\n", round(g_area, 2)), cex = 1.2)
text(center_dist/2, 0, labels = paste0("m\n", round(m_area, 2)), cex = 1.2)
text(0, 0, labels = paste0("g&m\n", round(gm_area, 2)), cex = 1.2)

# 添加覆盖比例标注
text(-r_g - 0.5, r_g, 
     labels = paste0("m covered by g: ", round(gm_overlap_prop_m*100, 2), "%"), 
     adj = 0, cex = 1)

补充说明

若坚持使用eulerr,可尝试调整拟合算法参数(如method = "Nelder-Mead"),但受限于圆形几何约束,很难完全匹配你设定的覆盖比例,手动绘制是最可靠的方式。

内容的提问来源于stack exchange,提问作者Laas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:23:17