在gather()之后渲染闪亮的ggplot图表输出

时间:2018-08-09 07:36:21

标签: r ggplot2 shiny tidyverse

我正在尝试为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()中拥有它,但是想要以一种如上所述的简洁方式来完成它。 Plot

output$plot <- renderPlot({
  eval(parse(text = paste0("ggplot(data_pg_df, aes(x=",input$dataInput,")) + geom_bar()"  )))
})

1 个答案:

答案 0 :(得分:1)

您的问题在于如何从 active 检索对象。 您可以尝试以下操作:

output$plot <- renderPlot({
data <- selectedData()
ggplot(data_pg_df1, aes(data)) + geom_bar()
})

有关反应性帮助,请参见here,有关SO的问题请参见here。 还要小心使用ggplot2语法...