在Shiny R中的单个PDF中保存多个图

时间:2018-03-12 06:33:58

标签: r pdf ggplot2 download shiny

我正在尝试使用下载处理程序将我的Shiny App中的ggplots导出到单个PDF文件中,但它无法正常工作。 PDF文件正在保存,但它只给我最后一个ggplot而不是全部三个。任何帮助将不胜感激!

以下是服务器的代码:

shinyServer(function(input, output, session) {
plotinput()
{
df<-data.frame(q=c(1,3,5,7,9),w=c(2,4,6,8,10),z=c(1,2,3,4,5))
ggplot(df,aes(x=q,y=w))+geom_point()
ggplot(df,aes(x=z,y=w))+geom_point()
ggplot(df,aes(x=q,y=z))+geom_point()
}
output$allgraphs <- downloadHandler(
filename = function(){paste0("graphs.pdf")},
content = function(file){
pdf(file,onefile = TRUE)
print(plotinput())
dev.off()
}
) 
})

1 个答案:

答案 0 :(得分:0)

我们可以用

做到这一点
library(shiny)
library(grid)
library(gridExtra)



runApp(list(
  ui = fluidPage(downloadButton('allgraphs')),
  server = function(input, output) {

    plotinput <- function() {
      df<-data.frame(q=c(1,3,5,7,9),w=c(2,4,6,8,10),z=c(1,2,3,4,5))
      list(p1 = ggplot(df,aes(x=q,y=w))+geom_point(),
      p2 =  ggplot(df,aes(x=z,y=w))+geom_point(),
      p3 = ggplot(df,aes(x=q,y=z))+geom_point())
    }

    output$allgraphs = downloadHandler(
      filename = 'graphs.pdf',
      content = function(file) {
       pdf(file)

        arrangeGrob(print(plotinput()[['p1']]),
                    print(plotinput()[['p2']]), 
                    print(plotinput()[['p3']]), ncol = 3)  
        dev.off()
      })
  }
))

-output

allgraphs.pdf

1

enter image description here

2

enter image description here

3

enter image description here