Как сделать так, чтобы плотно поработать с блестящим и gridExtra? - PullRequest
0 голосов
/ 29 мая 2018

Я использую R блестящий, хотелось бы поместить несколько графиков ggplotly рядом с помощью gridExtra.

Один график (без 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 голосов
/ 29 мая 2018

Вместо использования grid.arrange для передачи множества графиков на один plotlyOutput лучше настроить пользовательский интерфейс на прием нескольких графиков, а затем передавать их по отдельности.Например, ваш пользовательский интерфейс и сервер могут выглядеть следующим образом

Обратите внимание, что для определения таких столбцов используется начальная загрузка, что означает, что ширину нужно добавить к 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...