我正在使用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”
答案 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)