Изменение значений на графике в Shiny - PullRequest
0 голосов
/ 01 октября 2019

У меня простое блестящее приложение, и я не знаю, почему значения на диаграмме меняются, когда я выбираю несколько элементов из списка. Ниже мой пример и изображения с плохими диаграммами.

ui

library(shiny)
library(plotly)

shinyUI(fluidPage(

    titlePanel("App test"),

    sidebarPanel(
        h3(" "),
        selectizeInput("name",
                       label = "Code",
                       choices = unique(data$Product),
                       multiple = T,
                       options = list(maxItems = 5, placeholder = 'Select a code'),
                       selected = "46")
        ),

    mainPanel(
        plotOutput("trendPlot")
    )
)
)

server

shinyServer(function(input, output, session) {

    output$trendPlot <- renderPlot({

            df_trend <- data[data$Product == input$name, ]

            ggplot(df_trend) +
                geom_line(aes(x = Month, y = Value, group = Product, colour = Product)) +
                theme(legend.position = "bottom")              

    })
})

Возглавьте мои данные:

> head(data)
# A tibble: 6 x 3
  Product Month Value
  <chr>   <chr> <dbl>
1 46      Jan     188
2 46      Feb     277
3 46      Mar     317
4 46      Apr     367
5 46      May     329
6 46      Jun     318

enter image description here

enter image description here

1 Ответ

1 голос
/ 02 октября 2019

Данные, указанные выше, включают только «46» для Продукта, поэтому их невозможно воспроизвести. Тем не менее, я подозреваю, что проблема в том, как вы фильтруете данные, позволяя использовать несколько входов с selectizeInput.

. Прямо сейчас вы фильтруете данные:

df_trend <- data[data$Product == input$name, ]

Что хорошо, если input$nameэто одно значение. Однако, с несколькими входами (например, 46 и 92), тогда input$name содержит эти два значения, и вам требуется другой тип сравнения.

Для поднабора ваших данных на основе сопоставления с несколькими значениями (например, сопоставления)вектор), попробуйте вместо этого:

df_trend <- data[data$Product %in% input$name, ]
...