Реактивный график - это отображение имени переменной? - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь создать реактивный график, где вы можете выбрать этническую принадлежность в selectInput () и увидеть население этой этнической принадлежности на Среднем Западе.

Это мой пользовательский интерфейс:

ethnicity_sidebar_content <- sidebarPanel(
  selectInput(
    inputId = "ethnicity",
    label = "Select Ethnicity",
    choices = list(
      "Total" = "total",
      "White" = "white",
      "Black" = "black",
      "American Indian" = "amerindian",
      "Asian" = "asian",
      "Other" = "other"
    )
  )
)
ethnicity_main_content <- mainPanel(
  plotOutput("ethnicity_plot")
)
ethnicity_panel <- tabPanel(
  "Midwest by Ethnicity",
  sidebarLayout(
    ethnicity_sidebar_content,
    ethnicity_main_content
  )
)

Это мой сервер:

midwest_poverty <- midwest %>%
  mutate(popbelowpoverty = floor(percbelowpoverty / 100 * poppovertyknown)) %>%
  group_by(state) %>%
  summarise(
    poppovertyknown = sum(poppovertyknown),
    popbelowpoverty = sum(popbelowpoverty)
  ) %>%
  mutate(popabovepoverty = poppovertyknown - popbelowpoverty)

server <- function(input, output) {
  output$ethnicity_plot <- renderPlot({
    p <- ggplot(data = midwest_ethnicity) +
      geom_bar(
        mapping = aes(x = state, y = input$ethnicity),
        stat = "identity"
      )
    p
  })
}

Когда я запускаю блестящее приложение, я получаю гистограмму, которая отображает имя столбца, а не данные в столбце.

Редактировать:Я думаю, что это была простая ошибка, когда я использовал aes вместо aes_string

1 Ответ

0 голосов
/ 01 июня 2019

Когда вы пишете aes(x = state, y = input$ethnicity) в вызове ggplot, он будет искать переменную state в наборе данных midwest_ethnicity для оси x. То же самое для y, он будет искать переменную с именем White, например, если это значение в input$ethnicity.

Не думаю, что в вашем наборе данных есть переменная с таким именем.

Если это так (белый - это переменная вашего набора данных), он не сможет работать, если ggplot не считает input$ethnicity строкой, а не значением. Вы можете проверить y = get(input$ethnicity).

Другой вариант, предложенный в комментариях, заключается в использовании aes_string() вместо aes().

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