【问题标题】:how to print a list-column of ggplots to pdf?如何将ggplots的列表列打印到pdf?
【发布时间】:2018-09-10 21:16:26
【问题描述】:

考虑这个funny 示例

mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
           x = c(1,2,3,5,6,7),
           y = c(3,5,6,4,3,2))

> mydata
# A tibble: 6 x 3
  group     x     y
  <chr> <dbl> <dbl>
1 a         1     3
2 a         2     5
3 a         3     6
4 b         5     4
5 b         6     3
6 b         7     2

在这里,我可以按组nest(),并将基于组的ggplot 存储到list-column 中。疯狂的事情。

> mydata %>% group_by(group) %>% 
+   nest() %>% 
+   mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point()))
# A tibble: 2 x 3
  group data             myplot  
  <chr> <list>           <list>  
1 a     <tibble [3 x 2]> <S3: gg>
2 b     <tibble [3 x 2]> <S3: gg>

但是,我想使用map 将这些图表中的每一个打印到一个pdf 中。也就是说,每组一个pdf 页面。

在这里,我不知所措。我怎样才能做到这一点? 谢谢!

【问题讨论】:

  • 您能否详细说明为什么需要为此使用map()/walk()?您是否试图避免存储图的中间步骤?如果我想将列表中的所有绘图保存到单个 pdf 中,我通常使用pdf(),其中的工作流程是使用pdf() 初始化文件,传递列表(如mydata$myplots),然后传递@987654337 @。我有一个例子here
  • @aosmith 除非您处于交互模式,否则您仍然需要打印调用吗?
  • @Moody_Mudskipper 是的,当您不以交互方式使用pdf() 时,您需要显式地print(),例如在函数中使用pdf()Here's one example.
  • 您好,您的链接非常酷!本质上这是一个程序的一部分,它会在某个时候溢出 ggplots 的 pdf

标签: r ggplot2 dplyr purrr


【解决方案1】:

只需打开 pdf 设备并打印 :)

library(tidyverse)
mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
                     x = c(1,2,3,5,6,7),
                     y = c(3,5,6,4,3,2))

mydata2 <- mydata %>% group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point()))

pdf()
print(mydata2$myplot)
dev.off()

作为@aosmith cmets,如果您以交互方式使用R,则可以跳过打印调用,但请注意,如果稍后将其包装到函数中,它将不再起作用,因此我建议保持明确。

如果你想链接它:

pdf()
mydata %>% group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point())) %>%
  pull(myplot) %>%
  print
dev.off()

pdf 的第一个参数是您打印文件的路径,默认为"Rplots.pdf",因此它将在您的工作文件夹中。请参阅?pdf 了解更多信息。

【讨论】:

  • 当我在 Rstudio 中这样做时,我实际上看不到输出 pdf。它应该弹出吗?
  • 看到我回答的结尾,如果有帮助请告诉我
  • 谢谢,我也想知道如何控制生成的图表的高度/重量,但我认为这值得提出一个新问题。我会尽快创建它
  • 这个见我回答的最后一句话;),宽度和高度是第二个和第三个参数
  • 谢谢!但我现在使用grid.arrange,这使事情变得有点复杂。你介意看看吗? :) 再次感谢! stackoverflow.com/questions/52275228/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2021-08-22
  • 1970-01-01
  • 2021-07-02
相关资源
最近更新 更多