R 为镶嵌面网格/镶嵌面包裹图的每一行指定唯一宽度

R 为镶嵌面网格/镶嵌面包裹图的每一行指定唯一宽度,r,ggplot2,plot,visualization,r-grid,R,Ggplot2,Plot,Visualization,R Grid,我希望为R中的单列、刻面包装的绘图的每一行指定一个自定义宽度(我知道这完全是非标准的) 使用grid.arrange我可以使用以下代码片段为镶嵌面包裹样绘图的每一行指定唯一的高度: group1 <- seq(1, 10, 2) group2 <- seq(1, 20, 3) x = c(group1, group2) mydf <- data.frame (X =x , Y = rnorm (length (x),5,1), gro

我希望为R中的单列、刻面包装的绘图的每一行指定一个自定义宽度(我知道这完全是非标准的)

使用
grid.arrange
我可以使用以下代码片段为镶嵌面包裹样绘图的每一行指定唯一的高度:

group1 <- seq(1, 10, 2)
group2 <-  seq(1, 20, 3)
x = c(group1, group2)
mydf <- data.frame (X =x , Y = rnorm (length (x),5,1), 
                    groups = c(rep(1, length (group1)), rep(2, length(group2))))

plot1 <- ggplot(mydf, aes(X, Y)) + geom_point()
plot2 <- ggplot(mydf, aes(X, Y)) + geom_point()

grid.arrange(plot1, plot2, heights=c(1,2))

group1是,如果使用ggplot
theme()
中的
plot.margin
功能,则可能会出现这种情况。通过执行以下操作,可以将每个打印宽度设置为页面总长度的百分比:

plot1 <- ggplot(mydf, aes(X, Y)) + geom_point()+theme( plot.margin = unit(c(0.01,0.5,0.01,0.01), "npc"))
plot2 <- ggplot(mydf, aes(X, Y)) + geom_point()+theme( plot.margin = unit(c(0.01,0.2,0.01,0.01), "npc"))

作为另一个选项,您可以使用
nullGrob
(一个只占用空间的空白grob)来分配给定行中的水平空间。例如:

library(gridExtra)
library(grid)

plot1 <- ggplot(mydf, aes(X, Y)) + geom_point()
plot2 <- ggplot(mydf, aes(X, Y)) + geom_point()

grid.arrange(arrangeGrob(plot1, nullGrob(), widths=c(1,1)), 
             plot2, heights=c(1,2))
库(gridExtra)
图书馆(网格)

图1您打算如何处理宽度?是否要在每行上添加更多绘图,还是出于视觉目的?一个想法可能是为每个绘图添加边距。类似于:
plot1 thanking@MikeyMike本质上,目标是使每个面的x轴具有n个单位,其中n是该面的观察数。每个单元都应该由一致的空间量来表示,因此,能够显示更多观察结果的面应该具有更长的x轴。如果我将每个刻面的宽度设置为相对于最大长度的长度的函数,那么边距技巧可能会起作用!我要试试这个…@MikeyMike你知道在哪里可以找到
plot.margin
可用单位的文档吗?我祈祷在%的范围内有一些东西,但担心不会有。关于
plot.margin
的文档,不幸的是,我一点也不知道。但是,如果您查看
?grid::unit
,您可以看到单元文档。这表明您可以使用
npc
单元将宽度设置为页面宽度的函数。因此
npc=0.5
意味着宽度将是
0.5
页面宽度。这就是你要找的吗?我相信类似的东西会有用:
plot1或
grid.arrange(p1,p2,layout_matrix=matrix(c(1,2,NA,2),2))
library(gridExtra)
library(grid)

plot1 <- ggplot(mydf, aes(X, Y)) + geom_point()
plot2 <- ggplot(mydf, aes(X, Y)) + geom_point()

grid.arrange(arrangeGrob(plot1, nullGrob(), widths=c(1,1)), 
             plot2, heights=c(1,2))