代码之家  ›  专栏  ›  技术社区  ›  Anakin Skywalker

在gather()之后呈现闪亮的ggplot图表输出

  •  0
  • Anakin Skywalker  · 技术社区  · 6 年前

    我正在尝试为Shiny构建一个ggplot输出。 我用gather()将初始数据帧收集成整洁的格式。

                   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)
    

    我收到一个错误 不知道如何为reactivexpr/reactive类型的对象自动选择刻度。默认为连续。 警告:错误:列 x 必须是1d原子向量或列表

    试图解决,但失败了。

    我的ggplot方法正确吗?或者我还需要在数据输入中添加“value”列。我不这么认为,因为我只想根据“变量”来选择。 我错过了什么?

    我想要的输出是这样的。我在eval()中有它,但是我想以一种整洁的方式来做,如上所述。 Plot

    output$plot <- renderPlot({
      eval(parse(text = paste0("ggplot(data_pg_df, aes(x=",input$dataInput,")) + geom_bar()"  )))
    })
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   AleBdC    6 年前

    问题在于如何从 反应性 . 你可以试试这样的方法:

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

    here 对于反应性帮助和 here 对于如此相关的问题。 还要注意ggplot2语法。。。