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.arrange
的 widths
参数。您必须确定每个维恩图总数的比率。在您的示例中,总大小比率为 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)
我想绘制 >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.arrange
的 widths
参数。您必须确定每个维恩图总数的比率。在您的示例中,总大小比率为 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)