我想在一个闪亮的仪表板选项卡中包含多个高度不同的图。
许多现有答案涵盖了在ggplotly中设置height参数。使用此参数确实会更改图形的渲染方式。但是,它不能解决我的问题。周围的对象呈现出已调整图形的原始高度。例如,如果第一个图形被加长,第二个图形将出现在其顶部。或者,如果缩短第一个图形,则在下一个图形之前将有较大的空白空间。
亚历山大·利奥(Alexander Leow)在对以下问题的秘密答复中提供了一种解决我的问题的方法: Shiny plotlyOutput() not responding to height and width sizes
不幸的是,由于多重情节列表结构,他的回答似乎不必要地复杂。
我试图将他的解决方案修改为一个图,但未成功。在应用中运行时,以下代码会产生错误: “对象类型闭包不可子集化”
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 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'))
),
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)
答案 0 :(得分:1)
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)