R Shiny Plotly генерирует график для каждого элемента в списке - PullRequest
0 голосов
/ 27 января 2020

Прямо сейчас я использую Sharp и Plotly в R для создания графиков для визуализации данных.

У меня есть этот список с элементами, и для каждого элемента я хочу создать график с именем этого элемента.

Возможно ли, чтобы ваше выходное имя графика основывалось на этом элементе списка?

Проще говоря:

Что у меня есть:

output$plot <- renderPlotly({})

Что я хочу:

listitems <- c("graph1", "graph2")

output$listitems[1] <- renderPlotly({})

Эта ситуация была бы идеальной, поскольку я хочу создать несколько графиков, используя функцию для минимизации кода.

Ответы [ 2 ]

1 голос
/ 27 января 2020

Если я правильно понимаю, вы не хотите назначать каждый сюжет вручную. Соответственно, мы можем использовать for-loop или lapply следующим образом:

library(shiny)
library(plotly)

ui <- fluidPage(
  uiOutput("myPlots")
)

server <- function(input, output, session) {

  listItems <- paste0("graph", 1:10)
  dfList <- replicate(10, data.frame(x = 1:10, y = runif(10)), simplify = FALSE)
  names(dfList) <- listItems

  lapply(seq_along(dfList), function(i){
    output[[listItems[i]]] <- renderPlotly({plot_ly(dfList[[i]], x = ~x, y = ~y, type = "scatter", mode = "lines+markers") %>% layout(title = listItems[i])})
  })

  output$myPlots <- renderUI({
    lapply(listItems, plotlyOutput)
  })
}

shinyApp(ui, server)
1 голос
/ 27 января 2020

Взгляните на подзаговоров . В вашем примере это должно быть что-то вроде:

library(shiny)
library(plotly)

ui <- fluidPage(
    plotlyOutput("plot")
  )

server <- function(input, output, session) {

  p1 <- plot_ly(economics, x = ~date, y = ~unemploy) %>%
     add_lines(name = ~"unemploy")
  p2 <- plot_ly(economics, x = ~date, y = ~uempmed) %>%
    add_lines(name = ~"uempmed")

  listitems <- list(p1, p2)

  output$plot <- renderPlotly({

   subplot(listitems)

    })
   }

shinyApp(ui, server)

Вывод:

enter image description here

...