如何通过downloadHandler中的反应函数调用绘图

时间:2013-10-11 12:58:42

标签: r ggplot2 shiny

如何在downloadHandler中调用使用被动功能创建的情节而不再重新定义?

非工作示例:

# Part of server.R

output$tgPlot <- renderPlot({
 plot1 <-ggplot(iris[iris$Species==input$species,])+geom_point(aes(Sepal.Length ,Sepal.Width))
 print(plot1)

 } ) 



  output$plotsave <- downloadHandler(
    filename = 'plot.pdf',
    content = function(file){
      pdf(file = file, width=12, height=4)
      tgPlot()
      dev.off()
    }
  )

为什么不能在downloadHandler中调用tgPlot()?还有另一种方式吗?

1 个答案:

答案 0 :(得分:5)

tgPlot()是否是在其他地方定义的函数?我没有看到你定义它。

您可能希望在常规(非反应)函数中定义绘图代码,您可以从这两个函数中引用它,a:

tgPlot <- function(inputSpecies){
 plot1 <-ggplot(iris[iris$Species==inputSpecies,])+geom_point(aes(Sepal.Length ,Sepal.Width))
 print(plot1)
}

output$tgPlot <- renderPlot({
    tgPlot(input$species)
}) 

output$plotsave <- downloadHandler(
  filename = 'plot.pdf',
  content = function(file){
    pdf(file = file, width=12, height=4)
    tgPlot(input$species)
    dev.off()
  }
)

这为您提供了一个可以生成情节的功能。然后可以在反应renderPlot上下文中引用此函数以生成反应性图,或生成PDF。