如何在 a4 pdf 上放置多个 ggplot 图表?
how to fit multiple ggplot charts on a a4 pdf?
考虑这个简单的例子
library(dplyr)
library(ggplot)
library(patchwork)
mytib <- tibble(group = as.factor(c(1,1,1,1,2,2,2,2,3,3,3,3)),
y = c(1,2,3,42,50,400,3,3,2,3,3,4),
x = c('a','b','c','d','a','b','c','d','a','b','c','d'))
p1 <- mytib %>% ggplot(aes(x = x, y = y, fill = group)) +
geom_col() + ggtitle('this is a messy chart')+
coord_flip()+
xlab('Hello') +
ylab('This is a nice comment')
现在我使用 patchwork
合并图表,这样我就可以在常规 a4
pdf 页面
上获得 3 行,每行 3 个图表
(p1 + p1 + p1)/
(p1 + p1 + p1)/
(p1 + p1 + p1)
ggsave(file="a4_output.pdf", width = 210, height = 297, units = "mm")
输出是一个不错的 a4 pdf
,但问题是 pdf
上的图表非常紧张。有没有办法保留它们的原始比例(在 pdf 上),使它们看起来不那么拉伸,甚至一行三个?我不介意它们看起来更小。
有什么想法吗?
谢谢!
问题是容积率的变化。现在,coord_flip
不适用于固定比率 - 但 - 使用 ggstance
!!我稍微更改了情节,使用 geom_colh
,切换了 x 和 y,并添加了固定比率。现在我们可以使用您的绘图布局,或者简单地将绘图打包在列表中并使用 wrap_plots
。我没有使用 reprex
输出,因为我正在分享 pdf 输出的屏幕截图。
library(tidyverse)
library(patchwork)
library(ggstance)
mytib <- tibble(group = as.factor(c(1,1,1,1,2,2,2,2,3,3,3,3)),
y = c(1,2,3,42,50,400,3,3,2,3,3,4),
x = c('a','b','c','d','a','b','c','d','a','b','c','d'))
p1 <-
mytib %>% ggplot(aes(x = y, y = x, fill = group)) +
geom_colh() + ggtitle('this is a messy chart')+
coord_fixed(100)+
xlab('Hello') +
ylab('This is a nice comment')
plotlist <- list()
for(i in 1:9) { plotlist[[i]] <- p1 }
ggsave(plot = wrap_plots(plotlist), file="a4_output.pdf", width = 210, height = 297, units = "mm")
另一个解决方案 是添加另一行 - 不是空图,而是使用 plot_layout
(p1 + p1 + p1)/
(p1 + p1 + p1)/
(p1 + p1 + p1) +
plot_layout(nrow = 4)
考虑这个简单的例子
library(dplyr)
library(ggplot)
library(patchwork)
mytib <- tibble(group = as.factor(c(1,1,1,1,2,2,2,2,3,3,3,3)),
y = c(1,2,3,42,50,400,3,3,2,3,3,4),
x = c('a','b','c','d','a','b','c','d','a','b','c','d'))
p1 <- mytib %>% ggplot(aes(x = x, y = y, fill = group)) +
geom_col() + ggtitle('this is a messy chart')+
coord_flip()+
xlab('Hello') +
ylab('This is a nice comment')
现在我使用 patchwork
合并图表,这样我就可以在常规 a4
pdf 页面
(p1 + p1 + p1)/
(p1 + p1 + p1)/
(p1 + p1 + p1)
ggsave(file="a4_output.pdf", width = 210, height = 297, units = "mm")
输出是一个不错的 a4 pdf
,但问题是 pdf
上的图表非常紧张。有没有办法保留它们的原始比例(在 pdf 上),使它们看起来不那么拉伸,甚至一行三个?我不介意它们看起来更小。
有什么想法吗? 谢谢!
问题是容积率的变化。现在,coord_flip
不适用于固定比率 - 但 ggstance
!!我稍微更改了情节,使用 geom_colh
,切换了 x 和 y,并添加了固定比率。现在我们可以使用您的绘图布局,或者简单地将绘图打包在列表中并使用 wrap_plots
。我没有使用 reprex
输出,因为我正在分享 pdf 输出的屏幕截图。
library(tidyverse)
library(patchwork)
library(ggstance)
mytib <- tibble(group = as.factor(c(1,1,1,1,2,2,2,2,3,3,3,3)),
y = c(1,2,3,42,50,400,3,3,2,3,3,4),
x = c('a','b','c','d','a','b','c','d','a','b','c','d'))
p1 <-
mytib %>% ggplot(aes(x = y, y = x, fill = group)) +
geom_colh() + ggtitle('this is a messy chart')+
coord_fixed(100)+
xlab('Hello') +
ylab('This is a nice comment')
plotlist <- list()
for(i in 1:9) { plotlist[[i]] <- p1 }
ggsave(plot = wrap_plots(plotlist), file="a4_output.pdf", width = 210, height = 297, units = "mm")
另一个解决方案 是添加另一行 - 不是空图,而是使用 plot_layout
(p1 + p1 + p1)/
(p1 + p1 + p1)/
(p1 + p1 + p1) +
plot_layout(nrow = 4)