【问题标题】:This title has been edited- Plotting in shinyApp. Code not generating any plots此标题已被编辑 - 在 shinyApp 中绘图。代码不生成任何图
【发布时间】:2021-12-31 16:40:47
【问题描述】:

我正在尝试在同一个闪亮窗口中创建多个绘图。不知道我做错了什么。它会抛出一个错误,表明我的主面板出现问题。

我尝试了一些不同的方法,但似乎没有任何效果。顺便说一句,这是对迈克对这个问题的回答的改编 How can put multiple plots side-by-side in shiny r?

library(ggplot2)
library(gridExtra)
library(shiny)

ui <- fluidPage(
  titlePanel("title panel"),
  sidebarLayout(position = "left",
                sidebarPanel("sidebar panel",
  checkboxInput("donum1", "plot1", value = T),
  checkboxInput("donum2", "plot2", value = F),
  checkboxInput("donum3", "plot3", value = F)
),
  mainPanel("main panel", outputplot="myPlot")))

server <- function(input, output, session) {
  
  Feature_A <- c(1, 2,1, 4,2)
  Feature_B <- c(4,5,6,6,6)
  Feature_C <- c(22,4,3,1,5)
  df<- data.frame(Feature_A ,Feature_B ,Feature_C)
  
  pt1 <- reactive({
    if (!input$donum1) return(NULL)
  p1<-ggplot(data=df, aes(Feature_A))+ geom_histogram()
  })
  pt2 <- reactive({
    if (!input$donum2) return(NULL)
  p2<-ggplot(data=df, aes(Feature_B))+ geom_histogram()
  })
  pt3 <- reactive({
    if (!input$donum3) return(NULL)
  p3<-ggplot(data=df, aes(Feature_C))+ geom_histogram()
  })
  
  output$myPlot = renderPlot({
    grid.arrange(p1, p2, p3, ncol=2,top="Main Title")
  })
  
}

shinyApp(ui, server)

编辑:

感谢 YBS 在下面的评论,我已经能够弄清楚上述问题并对上面的代码进行了更改。但是代码没有生成任何情节。有人可以帮忙吗!

【问题讨论】:

  • mainPanel 之前需要一个逗号, - 表示侧边栏面板的结束。
  • @YBS 代码未生成任何绘图。你能帮忙吗?

标签: r shiny shinydashboard shinyapps


【解决方案1】:

mainPanel() 调用未正确嵌套。它前面需要一个逗号,因为它是 sidebarLayout() 的一个参数(而它又是 fluidPage() 的一个参数。

ui <- fluidPage(
  titlePanel("title panel"),
  sidebarLayout(
    position = "left",
    sidebarPanel(
      "sidebar panel",
      checkboxInput("donum1", "plot1", value = T),
      checkboxInput("donum2", "plot2", value = F),
      checkboxInput("donum3", "plot3", value = F)
    ),
    mainPanel("main panel", outputplot="myPlot")
  )
)

我喜欢使用缩进/制表符级别更清楚地显示嵌套结构。它可以帮助我发现错误。

在第二个问题之后:

我不确定您希望将它与您给出的示例相比多远。我看到的最重要的区别是你没有从pt1pt2pt3 返回任何东西。删除分配部分(例如p1&lt;-)。

server <- function(input, output, session) {
  Feature_A <- c(1, 2,1, 4,2)
  Feature_B <- c(4,5,6,6,6)
  Feature_C <- c(22,4,3,1,5)
  df<- data.frame(Feature_A ,Feature_B ,Feature_C)
  
  pt1 <- reactive({
    if (!input$donum1) return(NULL)
    ggplot(data=df, aes(Feature_A))+ geom_histogram()
  })
  pt2 <- reactive({
    if (!input$donum2) return(NULL)
    ggplot(data=df, aes(Feature_B))+ geom_histogram()
  })
  pt3 <- reactive({
    if (!input$donum3) return(NULL)
    ggplot(data=df, aes(Feature_C))+ geom_histogram()
  })
  
  output$myPlot = renderPlot({
    ptlist <- list(pt1(),pt2(),pt3())
    wtlist <- c(input$wt1,input$wt2,input$wt3)
    # remove the null plots from ptlist and wtlist
    to_delete <- !sapply(ptlist,is.null)
    ptlist <- ptlist[to_delete] 
    wtlist <- wtlist[to_delete]
    if (length(ptlist)==0) return(NULL)

    grid.arrange(grobs=ptlist,widths=wtlist,ncol=length(ptlist))
  })
  
}

【讨论】:

  • 谢谢你!上面的评论帮助我解决了这个问题。我编辑了标题,因为代码没有生成任何情节。
猜你喜欢
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
相关资源
最近更新 更多