R中多个成对维恩图的比例绘制

Scaled plotting of multiple pairwise Venn diagrams in R

我想绘制 >50 Venn/Euler 两组图表,每组按比例绘制。 不仅两个集合的重叠和集合大小本身应该缩放,而且各个图表的大小相互比较也是必要的。

因为我知道没有 R 包允许同时绘制 >50 个成对维恩图,我打算先单独绘制它们(例如,使用 eulerr),然后将所有的他们一起使用 gridExtra 包或类似的东西。

但是,这样一来,各个成对图的大小就没有可比性了:

require(gridExtra)
require(eulerr)
fit1 <- euler(c(A=300, B=500, "A&B"=100))
fit2 <- euler(c(A=40, B=70, "A&B"=30))
grid.arrange(plot(fit1), plot(fit2), nrow=1)

有谁知道 R 程序包或程序包组合允许按大小适当绘制多个成对维恩图?

您可以尝试使用 grid.arrangewidths 参数。您必须确定每个维恩图总数的比率。在您的示例中,总大小比率为 800:110,即 7.27,因此如果您执行 grid.arrange(plot(fit1), plot(fit2), ncol = 2, widths = c(7.27, 1)),则 fit2 将比 fit1 小得多。来自 ggpubr 的 ggarrange() 函数应该也可以工作。

fit1 <- euler(c(A=300, B=500, "A&B"=100))
fit2 <- euler(c(A=40, B=70, "A&B"=30))

tot1 <- 800
tot2 <- 110
ratio_v <- tot1/tot2

grid.arrange(plot(fit1), plot(fit2), ncol = 2, widths = c(ratio_v, 1))
ggpubr:ggarrange(plotlist = list(plot(fit1), plot(fit2)), ncol = 2, widths = c(ratio_v, 1))

编辑:希望单独的成对集合有自己的大小比率,而不是相对于全局最大值的所有比率。这是一个简单的示例,但您可以编写一个函数来自动为每个示例执行此操作。基本上设置最大列数(我刚选择 100),然后将每个比率转换为 100。为每个维恩图集创建一行,然后 rbind 将它们全部放入矩阵并使用layout_matrix 参数。

### Make fits
fit1 <- euler(c(A=300, B=500, "A&B"=100))
fit2 <- euler(c(A=40, B=70, "A&B"=30))
fit3 <- euler(c(C=100, D=300, "C&D"=50))
fit4 <- euler(c(C=50, D=80, "C&D"=30))

### Assign totals 
tot1 <- 800
tot2 <- 110
tot3 <- 400
tot4 <- 130

### Find ratios
ratioAB_v <- round(tot1/tot2)
ratioCD_v <- round(tot3/tot4)

### Convert ratios
smallAB_v <- round(1/ratioAB_v*100)
smallCD_v <- round(1/ratioCD_v*100)

### Make rows
row1_v <- c(rep(1, (100-smallAB_v)), rep(2, smallAB_v))
row2_v <- c(rep(3, (100-smallCD_v)), rep(4, smallCD_v))

### Make matrix
mat <- rbind(row1_v, row2_v)

### Plot
grid.arrange(plot(fit1), plot(fit2), plot(fit3), plot(fit4), layout_matrix = mat)