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

使用R的ggarrange合并韦恩图时颜色位置错乱问题求助

问题根源

draw.pairwise.venn会根据区域面积自动调整圆圈位置:当area2大于area1时,会把面积更大的圆圈放在左侧,导致你设置的fill=c("#CC6677", "#4477AA")对应关系被打乱——原本要红色在左、蓝色在右,结果大圆圈(对应area2的蓝色)跑到左边,出现颜色位置互换。ggarrange只是合并绘图,本身不会改动单个图的元素布局。

解决方法

方法1:强制固定圆圈位置(无需换包)

在每个draw.pairwise.venn调用中添加reverse=FALSE参数,强制让area1对应的圆圈始终在左侧,不管面积大小:

# 修正后的单个韦恩图代码,统一添加reverse=FALSE
addisons <- draw.pairwise.venn(area1=1075, area2=1371,cross.area=757,
               fill=c("#CC6677", "#4477AA"), reverse=FALSE)

alcohol <- draw.pairwise.venn(area1=81830, area2=37252,cross.area=22472,
                        fill=c("#CC6677", "#4477AA"), reverse=FALSE)

anaemia <- draw.pairwise.venn(area1=30040, area2=12833,cross.area=3338,
                        fill=c("#CC6677", "#4477AA"), reverse=FALSE)

aneurysm <- draw.pairwise.venn(area1=2550, area2=5048,cross.area=1455,
                        fill=c("#CC6677", "#4477AA"), reverse=FALSE)

# 合并代码保持不变
library(ggpubr)
ggarrange(addisons, alcohol, anaemia, aneurysm,
      labels = c("Addison's disease", "Alcohol & substance", "Anaemia", "Aneurysm"),
      ncol = 2, nrow = 2, font.label=list(size=9))

这样无论两个区域面积大小如何,红色(对应area1)都会固定在左侧,蓝色(对应area2)在右侧,保证所有图的布局一致性。

方法2:使用其他包实现多图合并

如果不想用ggpubr,可以用gridExtra包的grid.arrange函数,同样支持多图合并,且不会改变单个韦恩图的布局:

install.packages("gridExtra")
library(gridExtra)
library(grid)

# 合并绘图并添加标题
grid.arrange(
  addisons, alcohol, anaemia, aneurysm,
  layout_matrix = rbind(c(1,2), c(3,4)),
  # 为每个子图添加标题
  top = textGrob(
    c("Addison's disease", "Alcohol & substance", "Anaemia", "Aneurysm"),
    x = c(0.25, 0.75, 0.25, 0.75), 
    y = 1.05, 
    gp = gpar(fontsize=9)
  )
)

注意:此方法同样需要先给单个韦恩图添加reverse=FALSE参数,才能保证颜色位置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:50:37