如何使用 shiny 和 gridExtra 进行绘图?
How to make plotly work with shiny and gridExtra?
我正在使用 R shiny 想在 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)
给我
Error in gList: only 'grobs' allowed in "gList"
与其使用 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)
我正在使用 R shiny 想在 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)
给我
Error in gList: only 'grobs' allowed in "gList"
与其使用 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)