像cowplot和pathwork这样的软件包允许不同的绘图对齐 彼此相邻/在彼此上,绘图区尺寸同步,而不考虑所需的空间 轴标签。 例如
install.packages("ggridges")
install.packages("patchwork")
library(tidyverse)
library(ggridges)
library(patchwork)
p1 <- ggplot(iris, aes(Sepal.Length, Species)) +
geom_density_ridges()
p2 <- ggplot(mtcars) +
geom_point(aes(mpg, disp))
p1 + p2 + plot_layout(ncol=1) #different length of y axis label, same plot area size.
这对 html 显示都有好处。 然而,对于期刊,我和其他许多人需要制作"独立"的情节。 图形显示来自不同源的数据,并具有不同的轴标签长度。 为了专业的外观,这些地块也需要具有相同的地块大小。 在文章格式中,如果页面格式相同,但它们之间有文本,它们通常会出现,并且
那么,我如何使它们需要完全"对齐"(如上例所示(,但可以说是单独的 r 对象。
我怎样才能做到这一点?
在 cowplot 中,有一个函数align_margin
,可以在 ggplot grobs 列表中对齐您的左右边距。
我们还包括一些图:
p1 <- ggplot(iris, aes(Sepal.Length, Species)) +
geom_density_ridges()
p2 <- ggplot(mtcars) +
geom_point(aes(mpg, disp))
p3 <- ggplot(PlantGrowth) +
geom_boxplot(aes(group, weight))
p4 <- ggplot(USArrests) +
geom_point(aes(Assault, UrbanPop))
对小插图稍作修改:
grobs <- lapply(list(p1, p2, p3,p4), as_grob)
plot_widths <- lapply(grobs, function(x) {x$widths})
aligned_widths <- align_margin(align_margin(plot_widths, "first"),"last")
# reset widths
for (i in seq_along(plots)) {
grobs[[i]]$widths <- aligned_widths[[i]]
}
要在页面中获取所有内容,请执行以下操作:
plot_grid(plotlist = grobs, ncol = 1)
要获得个性化:
grid.draw(grobs[[1]])