使用闪亮来突出显示条形图中的特定条形图

时间:2018-01-01 13:01:53

标签: r shiny

我不确定我是否以正确的方式这样做(我愿意接受建议!)。然而,如果要创建一个Shiny应用程序,我可以尝试选择一个条形图,然后应该在图形中突出显示该条形图。

对于此示例,我使用titanic_train数据集。

我做:

library(shiny)
library(ggplot2)
library(titanic)
library(dplyr)

UI <- fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),

  sidebarLayout(
    sidebarPanel(
      selectInput("specific_bar", "Pick bar to highlight:",
                  choices = unique(titanic_train$Embarked))
    ),

    mainPanel(
      plotOutput("plot_nice")
    )
  )
)


Server <- function(input, output) {

  filtered <- reactive({
    titanic_train$Specific <- ifelse((titanic_train$Embarked == input$specific_bar), 1,0)
  })

  output$plot_nice <- renderPlot({
    ggplot(filtered(), aes_string(x="Embarked", y="Survived", fill = "Specific")) + 
      geom_bar(stat = "identity") 
  })


}

shinyApp(ui = UI, server = Server)

然而,运行它会给我以下错误:

ggplot2 doesn't know how to deal with data of class numeric

问题似乎与filter()反应函数有关。对这里出了什么问题的想法?

1 个答案:

答案 0 :(得分:2)

你必须在反应部分中要求data.frame对象,
您正在做的是获取向量而不是将另一列添加到 titanic_train
这应该解决它:

library(shiny)
library(ggplot2)
library(titanic)
library(dplyr)

UI <- fluidPage(

  # Application title
  titlePanel("Hello Shiny!"),

  sidebarLayout(
    sidebarPanel(
      selectInput("specific_bar", "Pick bar to highlight:",
                  choices = unique(titanic_train$Embarked))
    ),

    mainPanel(
      plotOutput("plot_nice")
    )
  )
)


Server <- function(input, output) {

  filtered <- reactive({
    titanic_train$Specific <- ifelse((titanic_train$Embarked == input$specific_bar), 1,0)
    return(titanic_train)
  })

  output$plot_nice <- renderPlot({
    ggplot(filtered(), aes_string(x="Embarked", y="Survived", fill = "Specific")) + 
      geom_bar(stat = "identity") 
  })


}

shinyApp(ui = UI, server = Server)