【问题标题】:Shiny app, only showing some graphs闪亮的应用程序,只显示一些图表
【发布时间】:2016-09-26 11:58:53
【问题描述】:

我正在使用闪亮的应用程序制作一些预测图表。但是,我有一个问题,该应用程序只显示一些图表。我目前正在为应用程序的服务器部分使用以下代码。

server <- function(input, output) {  

 output$graph <- renderPlot({
      row.number <- which(grepl(input$n1, Data$Kontotal))
      name <- Data [row.number, -(1:3)]
      name <- t(name)
      name <- ts(name, frequency=12, start=c(2007,1))
      n.row <- nrow(name)

      en<-max(time(name))
      ds<-as.data.frame(window(name,end=en))
      names(ds)<-'obs'
      ds$date<-as.Date(time(window(name,end=en)))     


       p1a <- ggplot(data=ds,aes(x=date,y=obs)) 
       p1a <- p1a+geom_line(col='red')
       p1a <- p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0))
       p1a <- p1a+scale_y_continuous(name='mio.kr')
       p1a <- p1a + theme_bw() + 
            theme(panel.border = element_blank(), 
                  panel.grid.major = element_blank(),
                  panel.grid.minor = element_blank(), 
                  axis.line = element_line(colour = "black")) })


 output$graph2 <- renderPlot({

  if (input$n3 == "HW") { 
           row.number <- which(grepl(input$n1, Data$Kontotal))
           name <- Data [row.number, -(1:3)]
           name <- t(name)
           name <- ts(name, frequency=12, start=c(2007,1))
           n.row <- nrow(name)


           fit <- auto.arima (name)
           fcast <- forecast(fit, input$n2)



           ### Plotting

           data.pred <- forc.ggplot (name, fcast)




           p1a <- ggplot(data=data.pred,aes(x=date,y=obs)) 
           p1a <- p1a+geom_line(col='red')
           p1a <- p1a+geom_line(aes(y=fitted),col='blue')
           p1a <- p1a+geom_line(aes(y=forecast))+geom_ribbon(aes(ymin=lo95,ymax=hi95),alpha=.25)
           p1a <- p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0))
           p1a <- p1a+scale_y_continuous(name='mio.kr')
           p1a <- p1a + theme_bw() + 
                theme(panel.border = element_blank(), 
                      panel.grid.major = element_blank(),
                      panel.grid.minor = element_blank(), 
                      axis.line = element_line(colour = "black"))
           p1a


      }  

  if (input$n3 == "arima") { 
        row.number <- which(grepl(input$n1, Data$Kontotal))
        name <- Data [row.number, -(1:3)]
        name <- t(name)
        name <- ts(name, frequency=12, start=c(2007,1))
        n.row <- nrow(name)


        fit <- auto.arima (name)
        fcast <- forecast(fit, input$n2)



        ### Plotting

        data.pred <- forc.ggplot (name, fcast)




        p1a <- ggplot(data=data.pred,aes(x=date,y=obs)) 
        p1a <- p1a+geom_line(col='red')
        p1a <- p1a+geom_line(aes(y=fitted),col='blue')
        p1a <- p1a+geom_line(aes(y=forecast))+geom_ribbon(aes(ymin=lo95,ymax=hi95),alpha=.25)
        p1a <- p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0))
        p1a <- p1a+scale_y_continuous(name='mio.kr')
        p1a <- p1a + theme_bw() + 
             theme(panel.border = element_blank(), 
                   panel.grid.major = element_blank(),
                   panel.grid.minor = element_blank(), 
                   axis.line = element_line(colour = "black"))
        p1a


   }  


 })

}

问题是只显示 ARIMA 图。 注意,但是,在这里发布的代码中,我在代码的硬件部分更改了模型,因此它与 ARIMA 部分(包括模型)相同,只是为了检查它是因为 ets 函数(我用来估计 HW 模型)出了点问题。

它只是在 HW 的情况下应该在图表的位置留下一个空白区域,但为 ARIMA 模型绘制了正确的图表。

有人试过类似的吗?

【问题讨论】:

  • 请发帖ui.r

标签: r forecasting shiny


【解决方案1】:

p1a 放在renderPlot() 块的末尾if 块之外。 renderPlot 尝试绘制块的最后一个表达式。在input$n3 =="HW" 的情况下,您生成您的绘图对象p1a,然后继续评估下一个if 条件,即FALSE,因此没有任何内容传递给plotOutput()

另一种解决方案是使用switch() 而不是ifswitch() 只计算匹配元素的表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 2017-11-18
    • 1970-01-01
    • 2019-08-08
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    相关资源
    最近更新 更多