1

考虑这个简单的例子

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用来组合图表,以便在常规a4pdf 页面上获得 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 上),使它们看起来不那么拉伸,即使是三个在一行上?我不介意它们看起来更小。

有任何想法吗?谢谢!

4

1 回答 1

2

问题是容积率的变化。现在,coord_flip不适用于固定比率 - 但用户 Axeman 解释了如何处理这个问题- 使用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)
于 2020-02-24T23:39:20.603 回答