Shiny R - 使用循环打印多个图

时间:2014-04-02 21:52:55

标签: r shiny

我的global.R文件中有一个函数可以创建一个图:

CreatePlot<-function(mergedFiles,File1, File2) 
{
  main<- mergedFiles
  csv1<- main[,1:4]
  csv2<- cbind( main[,1],main[,5:7] )
  strikes<- factor(main$Strike,levels=c(main$Strike),ordered=TRUE)
  stacked<- stacked <- data.frame(time=strikes, value =c(c(csv1$Vol), c(csv2$Vol)) ,     variable = rep(c(File1,File2), each=NROW(csv1[,1])))  

  g<- ggplot(stacked, aes( x = time,  y=value, colour=variable, group= variable)      )       +   geom_line()  +  xlab("Strike") +geom_point(shape = 7,size = 1) +
    ylab("Volatiltiy") +ggtitle("Plot of Volatilities") + theme(axis.text.x =       element_text(angle = 90, hjust = 1))
  return(g)  
}

我想创建一个在循环中打印多个图的函数。假设我想在我的服务器中做3个这样的事情.R:

  output$MyList <- renderUI({ 
        main<- mergedFiles() # this is the data for my plots
        g<-CreatePlot(main, input$File1, input$File2) #this calls the create plot function
        for (i in 1:3){
          renderPlot({
              print(g) #for testing purposes I am just trying to print the same plot 3     times
          })
        }

})

和我在主面板中的UI.R:

uiOutput("MyList")

当我跑步时,没有任何事情发生。屏幕只是空白,没有错误。任何想法如何使用循环打印这样的多个图?

谢谢你!

1 个答案:

答案 0 :(得分:2)

您无法使用renderUI呈现情节。 renderUI仅评估&#34;表达式,该表达式返回Shiny标记对象,HTML或此类对象的列表。&#34;

您必须为要显示的每个地图创建plotOutput。 因此,您可以使用plotOuputs动态创建多个renderUI,然后使用循环创建图形。

看一下这个例子:https://gist.github.com/wch/5436415/