我不确定我这样做是否正确(我愿意接受建议!)。但是,如果创建一个 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
这个问题似乎确实与filtered() react 函数有关。对这里出了什么问题有什么想法吗?
最佳答案
你必须在 react 部分请求 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)
关于r - 使用 Shiny 来突出显示条形图中的特定条形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049864/