ggplotly 和 shinydashboard 框的布局问题

Layout problems with ggplotly and shinydashboard boxes

我遇到了一个问题,就是 ggplotly 对象根本没有留在带有 shiny 和 shinydashboard 的盒子里。在策划之前,一切都是正确的。但是当显示一个图时,框的大小会加倍,而图会停留在最上面。 它只发生在 ggplotly 上。一个普通的 ggplot 工作正常。

我用下面的鸢尾花数据集使其可重现。

ui.R

dashboardPage(dashboardHeader(title = "Title"),
          dashboardSidebar(
              sidebarMenu(
                  menuItem("Species Overview",
                           tabName = "species"),
                  
                  menuItem(
                      pickerInput(
                          inputId = "species",
                          choices = species,
                          multiple = TRUE)))),
          dashboardBody(
              tabItems(
                  tabItem(tabName = "species",
                          fluidRow(
                              box(
                                  title = "Plot1",
                                  #width = 6,
                                  
                                  id = "plot1",
                                  plotlyOutput(
                                      "plot1", width = "100%") ## box 1 with ggplotly object
                              ),
                              box(
                                  title = "Plot2",
                                  id = "plot2",
                                  #width = 6,
                                  plotOutput(
                                      "plot2", width = "100%") ## box 2 with ggplot object
                              ))))))

server.R

shinyServer(function(input, output) {
v <- reactiveValues()

observe({
    v$species <- input$species
})

species_selected <- reactive({
    validate(
        need(length(v$species) > 0, "Please select a species")
    )
    select_species(iris, v$species)})

plot1 = reactive({
    plot_1(species_selected())
})
plot2 = reactive({
    plot_2(species_selected())
})

output$plot1 = renderPlotly({
    plot1() |> ggplotly() ##ggplot object
})
output$plot2 = renderPlot({
    plot2() #ggplot object
})})

global.R

library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(ggplot2)
library(tidyverse)
#library(bs4Dash)

data(iris)
species = iris$Species |> unique() |> as.character()

select_species = function(df, species) {
  df = df |> 
    filter(Species %in% species)
  return(df)
}

plot_1 = function(df) {
  df = df
  p = df |> 
    ggplot(aes(x = Petal.Width, y = Petal.Length, color = Species)) +
    geom_point()
  return(p)
}

plot_2 = function(df) {
  p = df |> 
    ggplot(aes(x = Sepal.Width, y = Sepal.Length, color = Species)) +
    geom_point()
  return(p)
}

事情是这样的:

我愿意接受任何建议。我试过 bs4dash、shinydashboard、shinydashboardPlus。软件包都是最新的。

您可以指定框的高度并显示绘图对象,如下所示。

                                box(
                                    title = "Plot1",
                                    #width = 6,
                                    height = 460,
                                    id = "plot1",
                                    plotlyOutput(
                                      "plot1", width = "100%", height="400px") ## box 1 with ggplotly object
                                  ),