Отображение только тех значений х, выбранных пользователем - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в R. У меня большой набор данных, и я хочу, чтобы пользователь мог выбирать значения x, нанесенные на график. Чтобы сделать это проще, я сделал то же самое, используя набор данных mpg:

library(shiny)

ui <- fluidPage(
    selectInput(
        inputId= "manuf",
        label= "Manufacturer",
        choices= mpg$manufacturer,
        multiple= TRUE
    ),
    plotOutput("graph1")
)

server <- function(input, output) {
    output$graph1 <- renderPlot({
        ggplot() +
        geom_point (
            mapping = aes (
                x= input$manuf,
                y= ???
            )
        )
    })
}

shinyApp(ui = ui, server = server)

Я не могу понять, каков правильный синтаксис для ввода 'y'. Я гуглил свое сердце и не могу понять, и я уверен, что это относительно просто. Я хочу, чтобы он выводил данные только для того, что вы выбрали в раскрывающемся списке.

вставка y= mpg$hwy показывает ВСЕ hwy точки данных, когда выбран один производитель, и выдает ошибку («Эстетика должна быть либо длиной 1, либо такой же, как данные») с большим количеством. Я думаю, что ошибки говорят сами за себя, но это не помогает мне определить правильный код для «у». Идеи? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Отображения эстетики c для ggplot (например, aes(x = ...)) должны быть имен столбцов , но вы не предоставляете пользователю выбор имен столбцов, вы предоставляете пользователю выбор manufacturer значений --- которые соответствуют строкам. Если вы хотите, чтобы пользователь выбирал определенные строки для построения в зависимости от производителя, вы должны установить / отфильтровать данные, которые вы предоставляете, для ggplot, возможно, так:

library(shiny)
library(ggplot2)

ui <- fluidPage(
    selectInput(
        inputId  = "manuf",
        label    = "Manufacturer",
        choices  = mpg$manufacturer,
        multiple = TRUE
    ),
    plotOutput("graph1")
)

server <- function(input, output) {
    output$graph1 <- renderPlot({
        ggplot(data = mpg[mpg$manufacturer %in% input$manuf, ]) +
        geom_point (
            mapping = aes (
                x = manufacturer,
                y = hwy
            )
        )
    })
}

shinyApp(ui = ui, server = server)
0 голосов
/ 11 февраля 2020

Давайте на минутку забудем о Shiny и сосредоточимся на том, как бы вы фильтровали набор данных для построения с помощью ggplot(). Подход Tidyverse заключается в использовании dplyr::filter:

library(dplyr)
library(ggplot2)

mpg %>% 
  filter(manufacturer == "audi") %>% 
  ggplot(aes(manufacturer, hwy)) + 
  geom_point()

Таким образом, ваша серверная функция будет выглядеть примерно так (не проверено):

server <- function(input, output) {
  output$graph1 <- renderPlot({
    mpg %>%
      filter(manufacturer == input$manuf) %>%
      ggplot(aes(manufacturer, hwy)) +
      geom_point()
  )}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...