闪亮应用中无效的qplot无效

时间:2017-09-20 20:12:09

标签: r ggplot2 shiny

我正在尝试在R中创建一个交互式闪亮应用,当您选择其他“分配组”时,它会发生变化。该图是一个密度图表,跟踪案例的解决时间(在应用程序之外正常工作)。

为什么运行应用时密度图不显示?

我不确定问题出在哪里,但是当我尝试运行应用程序时,情节从不渲染,侧面板上的选择显示同一组的多个条目(我只想为每个组一个) 。和R在一半时间内崩溃。

如果我使用较小的数据集(1000行,3列),应用程序不会崩溃,但有没有办法让我改进代码,以便它与我的数据集一起运行(约50,000行和3列) ?

不幸的是,我无法分享实际数据,但这里是我生成和测试的模拟数据 - 同样的问题只有R不会崩溃,因为它是一个较小的数据集。下面的代码将运行,但在应用程序中,我只看到键 - 没有图表,并且在调整窗口大小时缩放不会重新调整;

以下是代码;

library(shiny)
library(ggplot2)

trax_cond <- data.frame(
    id = 1:6, 
    Assigned_Group3 = c("District of Columbia", "Ohio", "Oklahoma", "Tennessee", "Tennessee", "New York"),
    Total.Time.Days = c(5.9, 9.1, 7.8, 3, 8.3, 12.2)
)
#check variable class in each column
sapply(trax_cond, class)
trax_cond$Assigned_Group3 <- as.factor(trax_cond$Assigned_Group3)
trax_list <- as.list(trax_cond)

ui <- fluidPage(
  sidebarPanel(
  selectInput(inputId = "Assigned_Group3", label = "Assigned Groups:", choices = trax_list$Assigned_Group3),
  mainPanel(
    tags$h1("Density Plot"),
    plotOutput("P1")
   )
  )
)

###
server <- function(input, output){

  selectedData <- reactive({
    trax_cond[,trax_cond$Assigned_Group3]
  })


  output$P1 <- renderPlot({
    library(ggplot2)
    qplot(Total.Time.Days, data=trax_cond, geom="density", fill=Assigned_Group3, alpha=I(.5), 
           main="Distribution Days to Resolve", xlab="Resolution Time (Days)", 
           ylab="Density")
  })
}

shinyApp(ui,server)

这会产生: enter image description here

如果我调整窗口大小,输出就会被切断 enter image description here

如何修复问题,并确保在调整窗口大小时输出调整大小?

1 个答案:

答案 0 :(得分:0)

无法测试代码,我看到的一个错误是在服务器代码中:

selectedData <- reactive({
trax_cond[trax_cond$Assigned_Group3]
})

这应该是:

selectedData <- reactive({
trax_cond[,input$Assigned_Group3]
})

希望这有帮助。

修改

请参阅下面的代码,对您的代码进行一些小修改:

当您将用户指定的输入从ui传递到服务器时,可以使用input $ inputId访问该输入。如输入$ Assigned_Group3所示。 对于反应数据,您可以将qplot命令中的反应数据称为selectedData()。

library(shiny)
library(ggplot2)

trax_cond <- data.frame(
  id = 1:21, 
  Assigned_Group3 = c("District of Columbia", "Ohio", "Oklahoma", 
"Tennessee", "Tennessee", "New York"),
Total.Time.Days = c(5.9, 9.1, 7.8, 3, 8.3, 12.2)
)
#check variable class in each column
sapply(trax_cond, class)
trax_cond$Assigned_Group3 <- as.factor(trax_cond$Assigned_Group3)
trax_list <- as.list(trax_cond)

ui <- fluidPage(
  sidebarPanel(
    selectInput(inputId = "Assigned_Group3", label = "Assigned Groups:", 
  choices = trax_list$Assigned_Group3),
   mainPanel(
     tags$h1("Density Plot"),
      plotOutput("P1")
    )
  )
)

###
server <- function(input, output){

  selectedData <- reactive({
    trax_cond[trax_cond$Assigned_Group3 == input$Assigned_Group3,]
  })


  output$P1 <- renderPlot({
    library(ggplot2)
    qplot(Total.Time.Days, data=selectedData(), geom="density", alpha=I(.5), 
          main="Distribution Days to Resolve", xlab="Resolution Time 
               (Days)", 
          ylab="Density")
  })
}

shinyApp(ui,server)