总而言之,我想将使用 nest 和 ggplot2 创建的图的列表分为两列。我在方法中遇到的问题是,由于子图中的高度不同(每个组中元素的数量不同,可能不包括x轴标签等),所以不同子图中的元素最终会或多或少地导致尺寸不一致。
下面的示例代码使用主要的tidyverse软件包。我首先使用 mtcars 生成一些虚拟数据;将汽车分成随机的组,每辆车都分配一个组内位置。
dummy <- mtcars %>%
mutate(group = sample(1:10,n(),replace = TRUE)) %>%
filter(group < 6) %>%
group_by(group) %>%
mutate(position = 1:n())
实际代码会生成子图列表(图)以及有关每个组中元素数量(高度)的信息。
## install patchwork via:
## devtools::install_github("thomasp85/patchwork")
plots <- dummy %>%
nest(-group,.key = "data") %>%
mutate(plots = map(data,~ggplot(data = .x,aes(x = position,y = hp)) +
geom_bar(stat="identity") +
coord_flip()),heights = purrr::map(data,~ nrow(.)) %>% unlist())
g.plot <- patchwork::wrap_plots(plots$plots,ncol = 1,heights = plots$heights)
功能 wrap_plots 能够使用有关高度的信息(包括图像面板A)来生成漂亮的单面板图像。当绘图中有大量图像时,单列绘图是不实际的。因此,请问如何将上述代码(面板A)的输出转换为希望的输出(面板B)的帮助。 C面板夸大了我使用不同的图像串联方法产生的问题性影响。
当前输出和希望的输出