我正在尝试为Shiny构建ggplot输出。 我将我的初始数据框和collect()整理成整齐的格式。
variable value
1 Region Africa
2 Region Europe
3 Region Europe
4 Region Latin America
13 Country Sudan
14 Country Russia
15 Country United Kingdom
16 Country Peru
17 Country Malaysia
35 Client Bank
36 Client Bank2
37 PG PG 1
38 PG PG 2
54 Status High
55 Status Signed
56 Status Low
现在,我正在尝试创建一个简单的图表,在该图表中,变量的更改应导致绘图的更改。
# UI code
ui <- fluidPage(theme = shinytheme("united"),
sidebarLayout(
sidebarPanel(
selectInput("dataInput", "Choose to filter by:",
choices = c("Region",
"Country",
"Client",
"PG",
"Status"),
selected = "Choose to display by")
),
mainPanel(
# Output
tabsetPanel(type = "tabs",
# tabPanel("Map", leafletOutput(outputId = 'map', height = 850)),
tabPanel("Plot", plotOutput("plot", height = 850)))
)
)
)
我的服务器看起来像这样
server <- function(input, output) {
# 1. Select among columns
selectedData <- reactive({
data_pg_df1[!is.na(data_pg_df1$variable) & data_pg_df1$variable == input$dataInput, ]
})
# Output
output$plot <- renderPlot({
ggplot(data_pg_df1, aes(selectedData)) + geom_bar()
})
}
shinyApp(ui = ui, server = server)
我收到一个错误
不知道如何自动为反应堆类型/反应堆类型的对象选择比例。默认为连续。
警告:错误:列x
必须是一维原子向量或列表
试图解决,但失败了。
我对ggplot的处理方法正确吗?或者我还需要在数据输入中添加“值”列。我不这么认为,因为我只想基于“变量”进行选择。 我想念什么?
我想要的输出看起来像这样。我在eval()中拥有它,但是想要以一种如上所述的简洁方式来完成它。
output$plot <- renderPlot({
eval(parse(text = paste0("ggplot(data_pg_df, aes(x=",input$dataInput,")) + geom_bar()" )))
})