如何使plotly与shiny和gridExtra一起工作?

d_w*_*d_w 5 r gridextra shiny plotly r-plotly

我正在使用 R闪亮,想在 gridExtra 的帮助下并排放置几个 ggplotly 图。

一张图(没有 gridExtra)效果很好:

library(shiny)
library(plotly)

u <- fluidPage(plotlyOutput(outputId = "myplots"))

s <- function(input, output) {
  pt1 <- reactive({
    ggplotly(qplot(42))
  })

  output$myplots <- renderPlotly({
    pt1()
  })
}

shinyApp(u, s)
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试通过 gridExtra 添加另一幅图时,它拒绝工作:

library(shiny)
library(plotly)
library(gridExtra)

u <- fluidPage(plotlyOutput(
  outputId = "myplots"
))

s <- function(input, output){
  pt1 <- reactive({
    ggplotly(qplot(42))
  })

  pt2 <- reactive({
    ggplotly(qplot(57))
  })

  output$myplots <- renderPlotly({
    grid.arrange(pt1(), pt2(),
                 widths = c(1, 1),
                 ncol = 2)
  })
}

shinyApp(u, s)
Run Code Online (Sandbox Code Playgroud)

给我

gList 中的错误:“gList”中仅允许“grobs”

Con*_*son 6

与其grid.arrange将多个绘图传递给单个绘图plotlyOutput,不如将您的 ui 设置为接受多个绘图,然后单独传递它们。例如,您的用户界面和服务器可能如下所示

请注意,像这样定义列使用 Bootstrap 主题,这意味着宽度需要添加到 12。这就是为什么我将每列的宽度定义为 6 - 每列自然会填充一半页面

library(shiny)
library(plotly)
library(gridExtra)

u <- fluidPage(
  fluidRow(
    column(6, 
           plotlyOutput("pt1")),
    column(6, 
           plotlyOutput("pt2"))
  )
)

s <- function(input, output){
  output$pt1 <- renderPlotly({
    ggplotly(qplot(42))
  })

  output$pt2 <- renderPlotly({
    ggplotly(qplot(57))
  })

}

shinyApp(u, s)
Run Code Online (Sandbox Code Playgroud)

  • 无论谁对此投反对票,您至少可以发表评论解释原因。如果您只是在没有任何解释的情况下投反对票,那么对任何人来说都是零帮助。这是对一个经常被问到的问题的合理答案 (5认同)