具有动态高度的闪亮 renderPlot
shiny renderPlot with dynamic height
问题
我想动态更改渲染图的高度,这样如果它包含很多数据点,就会将更多 space 分配给该图。然后应该简单地移动情节下方的内容。
renderPlot
的 height
参数可用于此,但随后情节溢出到下一个元素,我想避免这种情况。
我可以通过使用 uiOutput
来规避它,但我想知道我是否可以在 没有 的情况下获得相同的行为 renderUI
?
预期结果
我希望在地块大小发生变化时移动地块下方的 div
,没有 使用 renderUI
截图
Div不动
溢出进入div
代码
library(shiny)
library(ggplot2)
ui <- fluidPage(
fluidRow(
column(width = 2, sliderInput("n", "Number of Rows:", 1, 49, 10)),
column(width = 10, plotOutput("plot"))
),
fluidRow( ## the plot oevrflows into this div when the plot grows
column(width = 12, div(style = "background:red; height: 100px"))
),
fluidRow(
column(width = 10, offset = 2, uiOutput("ui"))
),
fluidRow( ## this div is properly moved down as the plot grows
column(width = 12, div(style = "background:red; height: 100px"))
)
)
server <- function(input, output, session) {
data <- reactive(data.frame(id = factor(1:input$n, 1:input$n),
y = rpois(input$n, 200)))
output$plot <- renderPlot(
qplot(id, y, geom = "col", fill = y, data = data()) +
coord_flip(), height = function() 20 * NROW(data())
)
output$ui <- renderUI(plotOutput("plot2", height = 20 * NROW(data())))
output$plot2 <- renderPlot(
qplot(id, y, geom = "col", fill = y, data = data()) +
coord_flip()
)
}
可以在ui部分写plotOutput("plot", height = "auto")
。 plotOutput 的默认高度固定为 400 像素。通过设置 height="auto" 绘图会自动调整内容。
问题 我想动态更改渲染图的高度,这样如果它包含很多数据点,就会将更多 space 分配给该图。然后应该简单地移动情节下方的内容。
renderPlot
的 height
参数可用于此,但随后情节溢出到下一个元素,我想避免这种情况。
我可以通过使用 uiOutput
来规避它,但我想知道我是否可以在 没有 的情况下获得相同的行为 renderUI
?
预期结果
我希望在地块大小发生变化时移动地块下方的 div
,没有 使用 renderUI
截图
Div不动
溢出进入div
library(shiny)
library(ggplot2)
ui <- fluidPage(
fluidRow(
column(width = 2, sliderInput("n", "Number of Rows:", 1, 49, 10)),
column(width = 10, plotOutput("plot"))
),
fluidRow( ## the plot oevrflows into this div when the plot grows
column(width = 12, div(style = "background:red; height: 100px"))
),
fluidRow(
column(width = 10, offset = 2, uiOutput("ui"))
),
fluidRow( ## this div is properly moved down as the plot grows
column(width = 12, div(style = "background:red; height: 100px"))
)
)
server <- function(input, output, session) {
data <- reactive(data.frame(id = factor(1:input$n, 1:input$n),
y = rpois(input$n, 200)))
output$plot <- renderPlot(
qplot(id, y, geom = "col", fill = y, data = data()) +
coord_flip(), height = function() 20 * NROW(data())
)
output$ui <- renderUI(plotOutput("plot2", height = 20 * NROW(data())))
output$plot2 <- renderPlot(
qplot(id, y, geom = "col", fill = y, data = data()) +
coord_flip()
)
}
可以在ui部分写plotOutput("plot", height = "auto")
。 plotOutput 的默认高度固定为 400 像素。通过设置 height="auto" 绘图会自动调整内容。