У меня есть приложение shinydashboard , и я хочу вывести объект plot_ly()
в shinydashboard::box()
разное время, в зависимости от входного значения пользователя. Однако поле не становится больше, но размер графиков уменьшается только для того, чтобы уместиться в поле.
Вопрос: Как увеличить размер ящика в зависимости от количества участков?
Цель: Я хочу, чтобы поле Plot1 выглядело как поле Plot2 , когда для поля , введенного в число , установлено значение 3.
Идея: Мой план состоял в том, чтобы умножить размер по умолчанию (400 пикселей) для прямоугольника на количество графиков для построения. То есть поместите переменную в height = sprintf('%spx', 1 * 400)
вместо 1. Однако из пользовательского интерфейса я не могу получить доступ к выводу реактивной функции plot_fun()
, где хранится эта информация.
require(shiny)
require(shinydashboard)
require(plotly)
# setup -------------------------------------------------------------------
plot_fun = function(data, n) {
p1 = plot_ly(data) %>%
add_trace(x = ~Sepal.Length, y = ~Sepal.Width,
type = 'scatter', mode = 'markers')
p_l = rep(list(p1), n)
p_fin = subplot(p_l,
nrows = length(p_l)#,
# heights = 1/n # heights of subplots
)
return(p_fin)
}
# ui ----------------------------------------------------------------------
header = dashboardHeader()
sidebar = dashboardSidebar(
numericInput('num_in', 'put in a number', value = 1)
)
body = dashboardBody(
fluidRow(
box('Plot1',
width = 6,
# height = '500px', # box height - scales automatically
plotlyOutput(outputId = 'plot1',
height = sprintf('%spx', 1 * 400))), # 400px is the default
box('Plot2',
width = 6,
plotlyOutput(outputId = 'plot2',
height = sprintf('%spx', 3 * 400)))
)
)
ui = dashboardPage(header, sidebar, body)
# server ------------------------------------------------------------------
server = function(input, output) {
output$plot1 = renderPlotly({ plot_fun(iris, input$num_in) })
output$plot2 = renderPlotly({ plot_fun(iris, 3) })
}
# app ---------------------------------------------------------------------
shinyApp(ui, server)