如何对齐使用视口构建的垂直组合图
How to align vertically combined plots which are build with viewport
我想使用 viewport
垂直合并两个图形。图形是使用 ggplot 和 facet_grid()
创建的。
出现的问题是分类变量的图例长度不同。这导致具有不同宽度的地块,因为
传说占据了更多的地方。我希望地块的宽度相同。
我该如何解决这个问题?
这是一个未对齐图的图形示例:
这是生成图形的代码:
# dataframe
x <- rep(1:10,2)
y <- x + rep(c(0,2),each=10)
sex <- rep(c("f","m"), each=10)
sex2 <- rep(c("fffffffff","mmmmmmmmm"), each=10)
df0 <- data.frame(x = x, y = y, sex = sex, sex2 = sex2)
# libraries
library("grid")
library("gridExtra")
library("ggplot2")
# Viewport
Layout <- grid.layout(nrow = 2, ncol = 1, heights = unit(c(1,1), c("null","null")))
vplayout <- function(x,y) {
viewport(layout.pos.row=x, layout.pos.col=y)
}
# plot object
p1 <- ggplot(df0,aes(x = x, y = y,linetype=sex)) +
geom_line()
p2 <- ggplot(df0,aes(x = x, y = y,linetype=sex2)) +
geom_line()
# figures
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw')
grid.newpage()
pushViewport(viewport(layout= Layout))
print(p1 + theme_bw(base_size=5), vp = vplayout(1,1))
print(p2 + theme_bw(base_size=5), vp = vplayout(2,1))
dev.off()
您可以使用cowplot::plot_grid
# figures
library(cowplot)
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw')
grid.newpage()
plot_grid(p1, p2, align = "v", nrow = 2, rel_heights = c(1/2, 1/2))
dev.off()
注意:我不知道你是怎么设置的df0
所以不能显示导出的情节。
我想使用 viewport
垂直合并两个图形。图形是使用 ggplot 和 facet_grid()
创建的。
出现的问题是分类变量的图例长度不同。这导致具有不同宽度的地块,因为
传说占据了更多的地方。我希望地块的宽度相同。
我该如何解决这个问题?
这是一个未对齐图的图形示例:
这是生成图形的代码:
# dataframe
x <- rep(1:10,2)
y <- x + rep(c(0,2),each=10)
sex <- rep(c("f","m"), each=10)
sex2 <- rep(c("fffffffff","mmmmmmmmm"), each=10)
df0 <- data.frame(x = x, y = y, sex = sex, sex2 = sex2)
# libraries
library("grid")
library("gridExtra")
library("ggplot2")
# Viewport
Layout <- grid.layout(nrow = 2, ncol = 1, heights = unit(c(1,1), c("null","null")))
vplayout <- function(x,y) {
viewport(layout.pos.row=x, layout.pos.col=y)
}
# plot object
p1 <- ggplot(df0,aes(x = x, y = y,linetype=sex)) +
geom_line()
p2 <- ggplot(df0,aes(x = x, y = y,linetype=sex2)) +
geom_line()
# figures
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw')
grid.newpage()
pushViewport(viewport(layout= Layout))
print(p1 + theme_bw(base_size=5), vp = vplayout(1,1))
print(p2 + theme_bw(base_size=5), vp = vplayout(2,1))
dev.off()
您可以使用cowplot::plot_grid
# figures
library(cowplot)
tiff("test0.tiff", width=5, height=10, units="cm", res=300, compression = 'lzw')
grid.newpage()
plot_grid(p1, p2, align = "v", nrow = 2, rel_heights = c(1/2, 1/2))
dev.off()
注意:我不知道你是怎么设置的df0
所以不能显示导出的情节。