ggplotly 和 shinydashboard 框的布局问题
Posted
技术标签:
【中文标题】ggplotly 和 shinydashboard 框的布局问题【英文标题】:Layout problems with ggplotly and shinydashboard boxes 【发布时间】:2021-11-19 03:30:55 【问题描述】:我遇到了 ggplotly 对象的问题,它根本没有留在带有闪亮和闪亮仪表板的盒子里。在绘制某些东西之前,一切都是正确的。但是当显示一个图时,该框的大小会增加一倍,并且该图保持在顶部。 它只发生在 ggplotly 上。一个普通的 ggplot 可以正常工作。
我已使用下面的 iris 数据集使其可重现。
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
))))))
服务器.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
))
全球.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。软件包都是最新的。
【问题讨论】:
【参考方案1】:您可以指定框的高度并显示如下所示的plotly对象。
box(
title = "Plot1",
#width = 6,
height = 460,
id = "plot1",
plotlyOutput(
"plot1", width = "100%", ) ## box 1 with ggplotly object
),
【讨论】:
虽然我仍然不明白为什么会这样,但这个解决方案是有效的。屏幕尺寸不同会成为问题吗? 据我所知,plotlyOutput
与直接 plot-ly
对象相比,转换 ggplot
对象的 ggplotly 对象效果更好。未来可能会有更多改进。以上是关于ggplotly 和 shinydashboard 框的布局问题的主要内容,如果未能解决你的问题,请参考以下文章
使用shinydashboard和shinyjs在tabBox中启动时隐藏tabPanel
R + Shiny 哪个锤子?直的 Shiny、flexdashboard 还是 shinydashboard? [关闭]