R - 如何在闪亮中使用selectInput来更改ggplot renderPlot中的x和填充变量?

时间:2018-03-25 08:29:44

标签: r ggplot2 shiny

我正在尝试创建一个交互式闪亮仪表板,其中包含一个交互式绘图,您可以在其中更改绘图的值。我放在renderPlot中的代码块正常工作,所以当我使用selectInput来改变X和Fill变量时,我不明白为什么count不会在y轴上显示。

 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")
})

1 个答案:

答案 0 :(得分:1)

原因是input$xinput$ycharacter类。因此,请使用aes

而不是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")
})

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

enter image description here