私は、ダッシュボードの本体にいくつかのマップを表示することになっている、光沢のあるダッシュボードアプリケーションを作成しています。これまでのところ、マップをボディの幅全体に拡大しても問題ありませんが、どういうわけか全高に調整する気がありません。
リーフレット自体はすでに高さの100%をカバーするように設定されていますが、トリックは行いません。 leafletOutputのheight属性を使用するとすぐに、leafletオブジェクトはまったく表示されず、空のボックスが残ります。
コードは次のとおりです。
library(shinydashboard)
library(leaflet)
ui <- dashboardPage(
dashboardHeader(title = "Basic dashboard"),
dashboardSidebar(
sidebarMenu(
menuItem(
"Maps",
tabName = "maps",
icon = icon("globe"),
menuSubItem("Watersheds", tabName = "m_water", icon = icon("map")),
menuSubItem("Population", tabName = "m_pop", icon = icon("map"))
),
menuItem(
"Charts",
tabName = "charts",
icon = icon("bar-chart"),
menuSubItem("Watersheds", tabName = "c_water", icon = icon("area-chart")),
menuSubItem("Population", tabName = "c_pop", icon = icon("area-chart"))
)
)
),
dashboardBody(
tabItems(
tabItem(
tabName = "m_water",
box(
title = "Baltic catchment areas",
collapsible = TRUE,
width = "100%",
height = "100%",
leafletOutput("l_watershed")
)
),
tabItem(
tabName = "m_pop",
# Map in Dashboard
leafletOutput("l_population")
),
tabItem(
tabName = "charts",
h2("Second tab content")
)
)
)
)
server <- function(input, output) {
set.seed(122)
histdata <- rnorm(500)
output$l_watershed <- renderLeaflet({
leaflet(height = "100%") %>% addTiles() %>% setView(19.08, 60.25, zoom = 4) %>%addWMSTiles(
"http://62.236.121.188/arcgis/services/DataAndMaps/Background/MapServer/WMSServer?",
layers = "11",
options = WMSTileOptions(
format = "image/png",
transparent = TRUE
),
attribution = "Catchment area provided by HELCOM"
)
})
output$l_population <- renderLeaflet({
leaflet(height = "100%") %>% addTiles() %>% setView(19.08, 60.25, zoom = 4) %>%addWMSTiles(
"http://62.236.121.188/arcgis/services/DataAndMaps/Background/MapServer/WMSServer?",
layers = "17",
options = WMSTileOptions(
format = "image/png",
transparent = TRUE
),
attribution = "Population data provided by HELCOM"
)
})
}
shinyApp(ui, server)
個人的には、window-sizeを基準に高さを設定する方が満足できることを発見しました。 dashboardBodyの高さが定義されていないため、パーセンテージとしての高さは機能しません。しかし、文書全体に対しては問題ありません。
dashoboardBodyの100%は、100vh(ccs3-unit)マイナスヘッダー(最小50px)マイナスdashboardBodyパディング(2 * 15px)を作成します。
そのため、高さを100vh-80pxに設定すれば問題ありません。
Shinyはcss3-unitsをサポートしていないため、以下のコードのように、ドキュメントに直接含める必要があります。
library(shiny)
library(shinydashboard)
library(leaflet)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
tags$style(type = "text/css", "#map {height: calc(100vh - 80px) !important;}"),
leafletOutput("map")
)
)
server <- function(input, output) {
output$map <- renderLeaflet({
leaflet() %>% addTiles() %>% setView(42, 16, 4)
})
}
runApp(shinyApp(ui, server), launch.browser = TRUE)
楽しむ!
ピクセルサイズを手動で追加してみてください。
...
dashboardBody(
tabItems(
tabItem(
tabName = "m_water",
box(
title = "Baltic catchment areas",
collapsible = TRUE,
width = "100%",
height = "1000px",
leafletOutput("l_watershed",width="100%",height="1000px")
)
),
tabItem(
tabName = "m_pop",
# Map in Dashboard
leafletOutput("l_population",width="100%",height="1000px")
),
tabItem(
tabName = "charts",
h2("Second tab content")
)
)
)
...
vh
ユニットは、古いモバイルブラウザでは機能しません。以下のこのCSSは、コンピューターとモバイルで機能するはずです。
/* for computer */
div.outer {
height: calc(100vh - 80px);
padding: 0;
margin: 0;
min-height: 500px
}
@media all and (max-width:768px){
/* for mobile */
div.outer {
position: fixed;
top: 70px;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
padding: 0;
}
}