如何使用闪亮和gridExtra进行绘图工作?

时间:2018-05-29 08:11:44

标签: r shiny plotly gridextra r-plotly

我正在使用R shine希望在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)

现在,当我尝试通过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)

给我

  

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

1 个答案:

答案 0 :(得分:2)

不是使用grid.arrange将多个绘图传递给单个plotlyOutput,而是设置您的ui以接受多个绘图然后单独传递它们。例如,您的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)