简体   繁体   中英

R - How do I use selectInput in shiny to change the x and fill variables in a ggplot renderPlot?

I'm trying to make an interactive shiny dashboard that has an interactive plot where you can change the values of the plot. The code chunk that I'm putting inside of renderPlot works normally, so I don't understand why count isn't showing on the y axis when I use selectInput to change the X and Fill variables.

 inputPanel(
  selectInput('x', 'X', names(data)),
  selectInput('y', 'Y', names(data))
)

renderPlot({
    ggplot(data, aes(x = input$x)) +
  geom_bar(aes(fill = input$y), position = position_stack(reverse = TRUE)) +
 coord_flip() + 
 theme(legend.position = "top")
})

The reason is that the input$x and input$y are character class. So, instead of aes , use aes_string

renderPlot({
  ggplot(data, aes_string(x = input$x)) +
  geom_bar(aes_string(fill = input$y), position = position_stack(reverse = TRUE)) +
  coord_flip() + 
  theme(legend.position = "top")
})

A reproducible example with data(mpg)

library(shiny)
library(ggplot2)


data(mpg)

ui <- fluidPage(
  inputPanel(
    selectInput('x', 'X', choices = c("manufacturer", "model", "year", "cyl", "class"),
          selected = "class"),
    selectInput('y', 'Y', choices = c( "trans", "fl", "drv"), 
  selected = "drv")
  ),

  mainPanel(plotOutput("outplot"))

)

server <- function(input, output) {

  output$outplot <- renderPlot({
    ggplot(mpg, aes_string(x = input$x)) +
      geom_bar(aes_string(fill= input$y), position = position_stack(reverse = TRUE)) +
      coord_flip() + 
      theme(legend.position = "top")
  })

}

shinyApp(ui = ui, server = server)

-output

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM