使用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
相关产品推荐
相关产品推荐

