gpt4 book ai didi

r - 如何完美对齐数量不等的图 (ggplot2,gridExtra)

转载 作者:行者123 更新时间:2023-12-04 02:04:22 28 4
gpt4 key购买 nike

我想完美地对齐这些图:

unaligned plots

这是R代码:

library(tidyverse)
library(gridExtra)
groupes <- tribble(~type, ~group, ~prof, ~var,
1,1,1,12,
1,1,2,-24,
1,2,1,-11,
1,2,2,7,
2,1,1,10,
2,1,2,5,
2,2,1,-25,
2,2,2,2,
2,3,1,10,
2,3,2,3,
3,1,1,10,
3,1,2,-5,
3,2,1,25,
3,2,2,2,
3,3,1,-10,
3,3,2,3,
3,4,1,25,
3,4,2,-18)


hlay <- rbind(c(1,2,3),
c(1,2,3),
c(NA,2,3),
c(NA,NA,3))

p1 <- groupes %>% filter(type==1) %>% ggplot(aes(prof,var)) + geom_col() + facet_wrap(~group,ncol=1) +
coord_cartesian(ylim=c(-25,25)) +
labs(title="type 1",x="",y="")
p2 <- groupes %>% filter(type==2) %>% ggplot(aes(prof,var)) + geom_col() + facet_wrap(~group,ncol=1) +
coord_cartesian(ylim=c(-25,25)) +
labs(title="type 2",x="",y="")
p3 <- groupes %>% filter(type==3) %>% ggplot(aes(prof,var)) + geom_col() + facet_wrap(~group,ncol=1) +
coord_cartesian(ylim=c(-25,25)) +
labs(title="type 3",x="",y="")
grid.arrange(p1,p2,p3, layout_matrix=hlay)

我可能会通过添加 heights=c(1.3,1,1,1) 成功地产生更好的对齐。进入 grid.arrange但这不是一个完美的解决方案。另一种解决方案是不考虑标签占用的空间,但我不知道该怎么做。

最佳答案

如果您可以设置绝对面板大小(并相应地调整设备大小),则可能更易于管理。

justify <- function(x, hjust="center", vjust="center"){
w <- sum(x$widths)
h <- sum(x$heights)
xj <- switch(hjust,
center = 0.5,
left = 0.5*w,
right=unit(1,"npc") - 0.5*w)
yj <- switch(vjust,
center = 0.5,
bottom = 0.5*h,
top=unit(1,"npc") - 0.5*h)
x$vp <- viewport(x=xj, y=yj)
return(x)
}

library(grid)
gl <- lapply(list(p1,p2,p3),egg::set_panel_size, height=unit(1,"in"))
gl <- lapply(gl, justify, vjust="top")
gridExtra::grid.arrange(grobs=gl, nrow=1)

enter image description here

关于r - 如何完美对齐数量不等的图 (ggplot2,gridExtra),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49206866/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com