Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中多对维恩图的比例标绘_R_Venn Diagram_Eulerr - Fatal编程技术网

R中多对维恩图的比例标绘

R中多对维恩图的比例标绘,r,venn-diagram,eulerr,R,Venn Diagram,Eulerr,我想按比例绘制两组>50个维恩/欧拉图。 不仅两个集合的重叠和集合大小本身应该缩放,而且各个图表的大小应该相互比较 因为我知道没有一个R包允许同时绘制>50个成对维恩图,所以我计划先单独绘制它们,例如使用eulerr,然后使用gridExtra包或类似的东西将它们全部放在一起 然而,通过这种方式,单个成对图的大小是不可比较的: require(gridExtra) require(eulerr) fit1 <- euler(c(A=300, B=500, "A&B"=100)) f

我想按比例绘制两组>50个维恩/欧拉图。 不仅两个集合的重叠和集合大小本身应该缩放,而且各个图表的大小应该相互比较

因为我知道没有一个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.arrangeplotfit1、plotfit2、ncol=2、widths=c7.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))

很好,谢谢。在绘制列和行中的图表时,是否还有一个选项可以单独调整每行的宽度?是的,我没有想到。所以每一对都有自己的比率,独立于其他对?我已经更新了一个版本,我想它回答了你的问题,你只需要概括一下,这样你就可以在所有50+对上运行它。
### 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)