没有在R的Shiny App中获得图表

时间:2017-07-25 18:27:58

标签: r ggplot2 shiny

我正在尝试使用Shiny创建小应用程序。下面是我要创建的数据框架。

data<-data.frame(state=c('AZ','VA','CA','AZ','VA','CA'), city=c('Phoenix','Arlington','SantaClara','Mesa','Richmond','SF'),
                        avg=c(10,15,16,13,14,14), date=c('01/09/2017','01/10/2017','01/11/2017','02/09/2017','02/10/2017','02/10/2017'),stringsAsFactors = FALSE)

所以,我试图在日期(x轴)和平均值(y轴)之间创建一个图形。因此,此图表应根据State的下拉列表中的选择进行更改。例如,对于特定的选定状态,它应显示该州的可用城市(在其他下拉列表中)。

以下是我的代码:

library(shiny)
library(ggplot2)
library(plotly)

statelist<-as.list(data$state)
citylist<-as.list(data$city)
ui <- basicPage(
  # plotOutput("plot1", click = "plot_click"),
  # verbatimTextOutput("info")
  sidebarPanel(
    selectInput("plot1", label=h3("Select State"), choices = statelist),
    selectInput("plot2", label=h3("Select City"), choices = citylist)
  ),
  plotOutput(outputId="plot")
),

server <- function(input, output, session) {
  observe(
    {
      state <- input$plot1
      updateSelectInput(session, "plot2", choices = data$city[data$state == state])
    }
  ),
  output$plot<-renderPlot({
    ggplot(data[data$city == input$plot2 & 
                  data$state == input$plot1],aes(date,avg))
    +geom_line()
  })
}

shinyApp(ui, server)

Dropdown工作正常但没有得到图表。

提前致谢!!

1 个答案:

答案 0 :(得分:1)

我对您的代码进行了一些小修改:

  • 在不应该出现的地方有一些逗号:在ui构造函数之后,以及在observe构造函数之后。
  • data[data$city == input$plot2 & data$state == input$plot1,]
  • 中缺少逗号
  • 我将您的观察编辑为observeEvent
  • 我修改了图表以显示它实际发生了变化,因为样本数据非常有限。

希望这有帮助!

library(shiny)
library(ggplot2)
library(plotly)

data<-data.frame(state=c('AZ','VA','CA','AZ','VA','CA'), city=c('Phoenix','Arlington','SantaClara','Mesa','Richmond','SF'),
                 avg=c(10,15,16,13,14,14), Date=c('01/09/2017','01/10/2017','01/11/2017','02/09/2017','02/10/2017','02/10/2017'),stringsAsFactors = FALSE)

statelist<-unique(data$state)
citylist<-unique(data$city)
ui <- basicPage(
  # plotOutput("plot1", click = "plot_click"),
  # verbatimTextOutput("info")
  sidebarPanel(
    selectInput("plot1", label=h3("Select State"), choices = statelist),
    selectInput("plot2", label=h3("Select City"), choices = citylist)
  ),
  plotOutput(outputId="plot")
)

server <- function(input, output, session) {
  observeEvent(input$plot1,
    {
      state <- input$plot1
      updateSelectInput(session, "plot2", choices = data$city[data$state == state])
    }
  )

  output$plot<-renderPlot({
    data = data[data$city == input$plot2 & 
           data$state == input$plot1,]
        ggplot(data,aes(Date,avg)) + geom_point(size=5) + ggtitle(paste0(input$plot1," - ",input$plot2 ))

  })
}

shinyApp(ui, server)