繁体   English   中英

如何在 Shiny 应用程序中使用 ggplot 创建反应图

[英]How do I create a reactive plot using ggplot in Shiny application

我花了几个小时试图弄清楚如何使用 ggplot2 为我想要创建的闪亮应用程序生成条形图。 但是,ui 工作正常; 服务器函数生成一个空图。

问题在于 renderPlot 函数。 我相信我不能将反应值正确地传递给 ggplot 中的 aes_string 参数。 C2 是过滤后的数据集。 目标是构建一个简单的应用程序,其中用户选择两个变量,根据这些变量过滤数据集。 子集化数据集传递给 ggplot 数据参数。

       library(shiny)
library(dplyr)


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      selectInput(inputId = "Demog",label = "Factor:",choices = c("HH Income" = "Income",
                                                                  "Age Group" = "Age",
                                                                  "US Region" = "Region") , selected = "Age"),
      selectInput(inputId = "Car",label = "VW Model:",choices = c("BEETLE" = "BEETLE",
                                                                  "CC" = "CC",
                                                                  "EOS" = "EOS",
                                                                  "GOLF" = "GOLF",
                                                                  "GTI" ="GOLF SPORTSWAGEN GTI",
                                                                  "JETTA" = "JETTA",
                                                                  "PASSAT" = "PASSAT",
                                                                  "TIGUAN" = "TIGUAN",
                                                                  "TOUAREG" = "TOUAREG") , selected = "BEETLE"),
      radioButtons(inputId = "Metric",label ="Measurement Type",choices = 
                     c("Conquest Volume Index" = "TotCmpConqVol_IDX","C/D Ratio" = "TotCmpCDRatio_IDX"), selected = "TotCmpConqVol_IDX" )                

    )
  ),
  mainPanel(
    tags$h1("The Bar Charts"),
    tags$h2("The metrics"),


    plotOutput("P1")

  )

)
server <- function(input, output){
  library(ggplot2)
  CONQDF <- read.csv("C:/Users/Reginald/Desktop/CONQ_VW/CONQUEST2.csv")

  C2 <- reactive(subset(CONQDF,input$Demog %in% levels(input$Demog)[1] & CONQDF$VW_Model == input$Car))

  output$P1 <- renderPlot({
    ggplot(C2(),aes_string(x="CompMake", y=input$Metric))+ geom_bar(stat = "identity")
                          })
}






shinyApp(ui,server)

但是,ui 工作正常; 服务器函数生成一个空图。

这很可能是因为函数subset返回一个空数据集。 为了调试代码,首先,我会在控制台中打印出这部分:

C2 <- reactive(subset(CONQDF,input$Demog %in% levels(input$Demog)[1] & CONQDF$VW_Model == input$Car))

我认为这部分是错误的,因为input$Demog只是一个字符串而不是一个因素。 这就是为什么levels(input$Demog) = NULLinput$Demog %in% levels(input$Demog) = FALSE 因此,您会得到一个空数据集。

要检查这个:

output$P1 <- renderPlot({
    print(C2()) # print it out to the console.
    ggplot(C2(),aes_string(x="CompMake", y=input$Metric))+ geom_bar(stat = "identity")
})

如果是这种情况,您只需要重新考虑子集化部分。

看起来您的C2函数看不到CONQDF (因此是空白图)。 您可以添加()CONQDFC2调用运行该read.csv每一次,但你可能会更好过移动read.csv干脆你的服务器功能之外。

所以移动这条线

CONQDF <- read.csv("C:/Users/Reginald/Desktop/CONQ_VW/CONQUEST2.csv")

到脚本的顶部,就在library(dplyr)下方。 这将使页面首次加载时闪亮读取该文件,而不是每次更新输入时,并且还将生成的数据帧放入全局环境中,这意味着您的C2 <-调用将能够看到它。

我无法轻松重现您的应用程序,因此无法测试我的答案。 请让我知道它是否有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM