Я хотел бы отобразить график во flexdashboard и предоставить shiny::sliderInput
для высоты и ширины графика, чтобы динамически изменить его размер.В блестящем это может быть достигнуто с помощью shiny::observe
:
ui <- shiny::fluidPage(
shiny::fluidRow(
shiny::column(3,
shiny::sliderInput("height", label = h3("Plot height"), min = 100,
max = 3000, value = 1000)),
shiny::column(3,
shiny::sliderInput("width", label = h3("Plot width"), min = 100,
max = 3000, value = 1000))
),
shiny::plotOutput("some_plot")
)
# Define server logic ----
server <- function(input, output) {
shiny::observe({
output$some_plot <- shiny::renderPlot({
plot(1:3, 1:3)
}, height = as.numeric(input$height), width = as.numeric(input$width))
})
}
# Run the app ----
shiny::shinyApp(ui = ui, server = server)
Однако, использование того же подхода не работает в flexdashboard, т.е. область графика просто пуста, вероятно, потому что shiny::observe
не возвращает графикобъект в правильном формате:
---
title : "Some dashboard"
date : "`r format(Sys.time(), '%d %B, %Y')`"
output:
flexdashboard::flex_dashboard:
vertical_layout: scroll
orientation : columns
theme : cosmo
source_code : embed
params:
runtime : shiny
---
Row {.sidebar}
----------
```{r}
shiny::sliderInput("height", label = h3("Plot height"), min = 100,
max = 3000, value = 1000)
shiny::sliderInput("width", label = h3("Plot width"), min = 100,
max = 3000, value = 1000)
```
Row
----------
### Some plot
```{r}
shiny::observe({
shiny::renderPlot({
plot(1:3, 1:3)
}, height = as.numeric(input$height), width = as.numeric(input$width))
})
```
Как мне добиться такого динамического изменения размера в flexdashboard?