привязка двух участков к одному выпадающему меню в Shiny - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над блестящим приложением, и у меня есть два графика, которые я хотел бы связать с одним selectInput.Таким образом, выбор пользователя обновит оба графика.

Есть ли способ достичь этого?

мой код

library(shiny)
library(plotly)
library(dplyr)
library(tidyr)

#ui
shinyUI(
  pageWithSidebar(
    headerPanel("NYC Flights Delays 2013"),
    sidebarPanel(
      selectInput("select", "Select a month", 
                  choices = list("2013","January" ,"February",
                                 "March","April",
                                 "May", "June",
                                 "July","August",
                                 "Septemeber","October",
                                 "November","December")
      )),

    mainPanel(
      plotlyOutput("monthlyavg",width="900",height = "400px")
    )
    ))


#server
function(input, output){
  output$monthlyavg<-renderPlotly({
    if (input$select =="January") {
      #calculate avg delay for departures and arrivals each month
        average_delay_month<-flight%>%
        group_by(flight_month)%>%
        summarise(Average_Departure_Delay=mean(dep_delay[dep_delay>0]),Average_Arrival_Delay=mean(arr_delay[arr_delay>0]))
      #filtering according to month
      average_delay_month<-subset(average_delay_month,flight_month=="January")

      #average delay by month(January)
      c<-average_delay_month %>%gather("metrics", "value", -flight_month)%>%
        ggplot(aes(flight_month, value, group= metrics, fill = metrics)) +
        geom_bar(stat = "identity", width=.5, position = "dodge")+
        labs(title="Average Delay by Month", x="Flight Month",y="Average Delay in Minutes")
      print(c)

      #--January--#
      #--All Months Flight count--#
      flight$flight_month<-factor(flight$flight_month, levels=c("January", "February", "March", "April", "May", 
                                                                "June","July","August",'September',"October","November","December"))
      #count number of flights per month
      flight_month_count<-setNames(aggregate(year~flight_month,data=flight,FUN=length),
                                   c('Month','Flight_Count'))
      flight_month_count<-subset(flight_month_count,Month=="January")
      #flight month_count_graph
      p<-ggplot(data=flight_month_count)+
        geom_bar(stat="identity",fill="#008080",aes(Month,Flight_Count),width=0.5)+
        labs(title="Total Number of Flights per Month",x="Flight Month",y="Number of Flights")
      print(p)
      }

Я попытался добавить два графика (c) и(p) под одним рендером, но это, похоже, не помогает.

Спасибо

1 Ответ

0 голосов
/ 30 мая 2019

Я попытался добавить два графика (c) и (p) в один renderPlotly, но, похоже, это не сработало.

Я бы посоветовал против этого.

Вариант 1. Используйте два renderPlotly вызова, оба из которых зависят от одного и того же input$select

Вариант 2. Создайте объект mydata <- reactive({...}) с вашими шагами обработки данных.Тогда в ваших двух отдельных renderPlotly звонках, ссылка mydata().Это будет обновляться каждый раз, когда будет сделан новый выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...