操纵 renderPlotly 对象的高度属性?

Manipulating height attribute of renderPlotly object?

我想在一个闪亮的仪表板选项卡中包含多个不同高度的图。

许多现有答案都涉及在 ggplotly 中设置高度参数。使用此参数确实会改变图形的呈现方式。但是,它不能解决我的问题。它周围的对象呈现为调整后的图形仍然具有其原始高度。例如,如果第一个图形被加长,第二个图形将出现在它的上方。或者,如果第一个数字被缩短,那么下一个数字之前会有一个大空space。

Alexander Leow 在他对以下问题的隐藏回答中为我的问题提供了一种解决方案:

不幸的是,他的回答似乎被多重情节列表结构复杂化了。

我试图将他的解决方案改编成一个情节,但我没有成功。当应用程序中 运行 时,以下代码会产生错误: "object type closure is not subsettable"

library(plotly)
library(shiny)
library(shinydashboard)

ui <- dashboardPage(dashboardHeader(title = "Test"),
                    dashboardSidebar( 
                      menuItem("Test", tabName = "test")
                      ),
                    dashboardBody(
                      tabItems(
                        tabItem(tabName = "test",
                                fluidRow(
                                  column(12, uiOutput('plot'))
                                  )
                                )
                        )
                      )
                    )



server <-  function(input, output) {
  output$plot <- renderUI({
    plot_output_object <- renderPlotly({
      p <- ggplot() +
        geom_point(aes(x=1,y=2))
      ggplotly(p)
    })
    attr(plot_output_object,'outputArgs') <- list(height="200px")
    return(plot_output_object)
  })
}


shinyApp(ui = ui, server = server)

以下示例演示了 ggplotly 高度参数如何无法解决我的问题。第一图和第二图差距很大


library(shiny)
library(shinydashboard)
library(plotly)

ui <- dashboardPage(dashboardHeader(title = "Test"),
                    dashboardSidebar( 
                      menuItem("Test", tabName = "test")
                    ),
                    dashboardBody(
                      tabItems(
                        tabItem(tabName = "test",
                                fluidRow(
                                  column(12, plotlyOutput('plot'))
                                ),
                                fluidRow(
                                  column(12, plotlyOutput('plot2'))
                                )
                        )
                      )
                    )
)

server <-  function(input, output, session) {
  output$plot <- renderPlotly({
    p <- ggplot() + geom_point(aes(x = 1, y = 2))
    ggplotly(p, height = 200)
  })
  output$plot2 <- renderPlotly({
    p2 <- ggplot() + geom_point(aes(x = 1, y = 2))
    ggplotly(p2)
  })
}

shinyApp(ui = ui, server = server)

ggplotly 有一个 height 参数。以下应该完成这项工作:

library(shiny)
library(shinydashboard)
library(plotly)

ui <- dashboardPage(dashboardHeader(title = "Test"),
                    dashboardSidebar( 
                      menuItem("Test", tabName = "test")
                    ),
                    dashboardBody(
                      tabItems(
                        tabItem(tabName = "test",
                                fluidRow(
                                  column(12, plotlyOutput('plot', height = "200px"))
                                ),
                                fluidRow(
                                  column(12, plotlyOutput('plot2'))
                                )
                        )
                      )
                    )
)

server <-  function(input, output, session) {
  output$plot <- renderPlotly({
    p <- ggplot() + geom_point(aes(x = 1, y = 2))
    ggplotly(p, height = 200)
  })
  output$plot2 <- renderPlotly({
    p2 <- ggplot() + geom_point(aes(x = 1, y = 2))
    ggplotly(p2)
  })
}

shinyApp(ui = ui, server = server)