为每个子图提供标题 - R Shiny

Provide title to each of the subplots - R Shiny

我正在尝试使用来自@blondeclover 的以下代码创建绘图。代码如下-

library(shiny)
library(ggplot2)
library(plotly)
library(grid)

shinyApp(
    ##### ui #######
    ui = fluidPage(
        fluidRow(
            sliderInput("n", 
                        "Number of plots", 
                        value = 1, min = 1, max = 5)),
        fluidRow(
            plotlyOutput("plots")
        )
    ), 
    ##### server ######
    server = function(input, output) {
        data("cars")
        # define max number of plots
        max_plots <- 5
        # generate the plots
        output$plots <- renderPlotly({
            plot_list <- lapply(1:input$n, function(i) {
                g <- ggplot(cars, aes(x = speed, y = dist)) +
                    geom_point() +
                    theme(plot.margin = unit(c(3, 1, 1, 1), "lines"))
                ggplotly(g)
            })
            p <- subplot(plot_list[1:input$n], shareX = TRUE, shareY = TRUE) %>%
                layout(title = "Car Plots")
            dev.off()
            p
        })
    }
)

但是,我无法调出作为输出收到的每个子图的标题。我的情节的标题因参数而异。所以,我想将它显示为标题。如何为每个图呈现标题而不是为所有图呈现单个标题?

我找到了答案。我们需要在 ggplot 代码中使用 facet_wrap 而不是 ggtitle。将其张贴在这里,以便对遇到与我相同问题的任何人有用。代码如下:

library(shiny)
library(ggplot2)
library(plotly)
library(grid)

shinyApp(
    ##### ui #######
    ui = fluidPage(
        fluidRow(
            sliderInput("n", 
                        "Number of plots", 
                        value = 1, min = 1, max = 5)),
        fluidRow(
            plotlyOutput("plots")
        )
    ), 
    ##### server ######
    server = function(input, output) {
        data("cars")
        # define max number of plots
        max_plots <- 5
        cars$main1 <- "title"
        # generate the plots
        output$plots <- renderPlotly({
            plot_list <- lapply(1:input$n, function(i) {
                g <- ggplot(cars, aes(x = speed, y = dist)) +
                    geom_point() + 
                    facet_wrap(~main1) +
                    theme(plot.margin = unit(c(3, 1, 1, 1), "lines"))
                ggplotly(g)
            })
            p <- subplot(plot_list[1:input$n], shareX = TRUE, shareY = TRUE)
            dev.off()
            p
        })
    }
)