在闪亮的应用程序中将 plotlyOutput() 移动到服务器端
Move plotlyOutput() to the server side in a shiny app
我有一个闪亮的仪表板,我想在其中使用 .js.
动态调整图形和框的高度问题是,只有当我在 plotlyOutput()
中传递高度参数并给出它是包含高度的 input$GetScreenHeight
。但是我得到 object 'input' not found
。我可以只将 plotlyOutput()
传递给里面的服务器吗?
jscode <-
'$(document).on("shiny:connected", function(e) {
var jsHeight = screen.height;
Shiny.onInputChange("GetScreenHeight",jsHeight);
});
'
shinyApp(
ui = dashboardPagePlus(
header = dashboardHeaderPlus(
),
sidebar = dashboardSidebar(),
body = dashboardBody(
tags$script(jscode),
boxPlus(
title = "Closable Box with dropdown",
closable = TRUE,
width = NULL,
status = "warning",
solidHeader = FALSE,
collapsible = TRUE,
plotlyOutput("pl",height = input$GetScreenHeight)
)
)
),
server = function(input, output) {
output$pl <- renderPlotly({
x <- faithful[, 2]
dat <- data.frame(xx = c(runif(100,20,50),runif(100,40,80),runif(100,0,30)),yy = rep(letters[1:3],each = 100))
p <- ggplot(dat,aes(x=xx)) +
geom_histogram(data=subset(dat,yy == 'a'),fill = "red", alpha = 0.2)
p <- ggplotly(p)
})
}
)
而不是在服务器中移动plotlyOutput
,您可以将高度设置为ggplotly
:
ggplotly(p, height = input$GetScreenHeight)
然后在plotlyOutput
中设置height = 100%
:
plotlyOutput("pl", height = "100%")
也许身高screen.height
不是一个好的选择,它太大了。我推荐:
jscode <-
'$(document).on("shiny:connected", function(e) {
var jsHeight = 0.4 * document.body.clientWidth;
Shiny.onInputChange("GetScreenHeight", jsHeight);
});
'
我有一个闪亮的仪表板,我想在其中使用 .js.
动态调整图形和框的高度问题是,只有当我在 plotlyOutput()
中传递高度参数并给出它是包含高度的 input$GetScreenHeight
。但是我得到 object 'input' not found
。我可以只将 plotlyOutput()
传递给里面的服务器吗?
jscode <-
'$(document).on("shiny:connected", function(e) {
var jsHeight = screen.height;
Shiny.onInputChange("GetScreenHeight",jsHeight);
});
'
shinyApp(
ui = dashboardPagePlus(
header = dashboardHeaderPlus(
),
sidebar = dashboardSidebar(),
body = dashboardBody(
tags$script(jscode),
boxPlus(
title = "Closable Box with dropdown",
closable = TRUE,
width = NULL,
status = "warning",
solidHeader = FALSE,
collapsible = TRUE,
plotlyOutput("pl",height = input$GetScreenHeight)
)
)
),
server = function(input, output) {
output$pl <- renderPlotly({
x <- faithful[, 2]
dat <- data.frame(xx = c(runif(100,20,50),runif(100,40,80),runif(100,0,30)),yy = rep(letters[1:3],each = 100))
p <- ggplot(dat,aes(x=xx)) +
geom_histogram(data=subset(dat,yy == 'a'),fill = "red", alpha = 0.2)
p <- ggplotly(p)
})
}
)
而不是在服务器中移动plotlyOutput
,您可以将高度设置为ggplotly
:
ggplotly(p, height = input$GetScreenHeight)
然后在plotlyOutput
中设置height = 100%
:
plotlyOutput("pl", height = "100%")
也许身高screen.height
不是一个好的选择,它太大了。我推荐:
jscode <-
'$(document).on("shiny:connected", function(e) {
var jsHeight = 0.4 * document.body.clientWidth;
Shiny.onInputChange("GetScreenHeight", jsHeight);
});
'