selectInput не работает при выборе переменных - PullRequest
1 голос
/ 12 марта 2019

Надеюсь, это всего лишь быстрый вопрос, я добавил функцию selectInput в свой код и связал ее с сервером, однако всякий раз, когда я меняю «год» в приложении, график рассеяния не меняет графики на основегод.

Мне не хватает какого-то кода?

library(shiny)
library(ggplot2)
pigs <- read.csv("pigs_data.csv")
# Define UI for application 
ui <- fluidPage(
# Application title
titlePanel("Pig Breeding"),
sidebarLayout( 
sidebarPanel(
  #Allows user to choose a year which changes the distribution of plot points
selectInput(inputId = "year",
            label = "Choose a year:",
            choices = c(2016, 2017, 2018),
            selectize = FALSE
            )
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("scatterplot")
)
)
)
# Define server logic 
server <- function(input, output) {
output$scatterplot <- renderPlot({
                    input$year
                    ggplot(pigs, 
                    aes(x = sow_count, y = species, col = species)) + 
                    geom_point() +
                    facet_grid(. ~year)
})
}
# Run the application 
shinyApp(ui = ui, server = server)

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Я думаю, что вам нужно обновить таблицу pigs , если она содержит переменную год , например:

server <- function(input, output) {
output$scatterplot <- renderPlot({
                    input$year
                    ggplot(pigs %>% filter(year %in% input$year), 
                    aes(x = sow_count, y = species, col = species)) + 
                    geom_point() +
                    facet_grid(. ~year)
})
}

Надеюсьэта помощь.

1 голос
/ 12 марта 2019

РЕДАКТИРОВАТЬ - перед тем, как попробовать observeEvent решение:

В зависимости от того, что именно вы хотите построить, это может быть как facet_grid(. ~year), а не facet_grid(. ~input$year).

Если facet_grid(. ~input$year) не то, что вы ищете, тогда ... Вы можете попробовать observeEvent из блестящей упаковки:

observeEvent(input$year, {
    output$scatterplot <- renderPlot({
      input$year
      ggplot(pigs, 
             aes(x = sow_count, y = species, col = species)) + 
        geom_point() +
        facet_grid(. ~year)
    })
})

Как правило, всякий раз, когда объект input$year изменяется, вы отображаете новый график.

Ваш пример будет выглядеть так:

library(shiny)
library(ggplot2)
pigs <- read.csv("pigs_data.csv")
# Define UI for application 
ui <- fluidPage(
  # Application title
  titlePanel("Pig Breeding"),
  sidebarLayout( 
    sidebarPanel(
      #Allows user to choose a year which changes the distribution of plot points
      selectInput(inputId = "year",
                  label = "Choose a year:",
                  choices = c(2016, 2017, 2018),
                  selectize = FALSE
      )
    ),
    # Show a plot of the generated distribution
    mainPanel(
      plotOutput("scatterplot")
    )
  )
)
# Define server logic 
server <- function(input, output) {
  observeEvent(input$year, {
    output$scatterplot <- renderPlot({
      input$year
      ggplot(pigs, 
             aes(x = sow_count, y = species, col = species)) + 
        geom_point() +
        facet_grid(. ~year)
    })
  })
}
# Run the application 
shinyApp(ui = ui, server = server)

Я надеюсь, что это работает для вас:)

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