→ celestialgod: 關鍵字 showModal shiny 08/22 00:28
→ celestialgod: 或是勇shinyBS,不過個人不推 08/22 00:29
→ celestialgod: shinyBS::bsModal 一年前用有一些問題,不確定現在 08/22 00:31
→ celestialgod: 有沒有改善,但是多數功能 shiny showModal就可以解 08/22 00:31
→ celestialgod: 決 08/22 00:31
→ clsmbstu: 感謝!再找時間來玩玩看~ 08/22 01:51
→ clsmbstu: 這個也好棒!大感謝! 08/22 10:37
※ 編輯: clsmbstu (140.112.25.106), 08/22/2017 11:13:43
→ clsmbstu: 細讀之後發現我的狀況withProgress提供的幫助有限 08/22 15:35
→ clsmbstu: 因為我最花時間的地方是leaflet::addPolygons而非迴圈 08/22 15:35
→ clsmbstu: 我試過把地圖繪製的pipeline切開來並在中間放incProgess 08/22 15:37
→ clsmbstu: 但詭異的是進度條跑滿了,圖還是要再等一陣子才會出來 08/22 15:38
推 cywhale: 不是可以 withProgress(message=... { 08/23 01:05
→ cywhale: ..(Your processes)..leaflet %<>% addPolygons() }) 08/23 01:06
我是參考你附的連結的寫法,
(本來想把每個server outputs都包在一個withProgress一起讀進度,但邏輯好像不對)
以下是我的server function一部分的簡化(省去根據UI的一些條件判斷式):
output$mapplot <- renderLeaflet({
# Define palettes
pal <- colorNumeric("YlOrRd", merge_map()$Values)
labs <- sprintf(
"<strong>%s</strong><br>%g%%", merge_map()$CountyTown, merge_map()$Values
) %>%
lapply(HTML)
# Map plotting
leaflet(merge_map()) %>%
setView(121, 23.5, 7) %>%
addTiles() %>%
addPolygons(weight = 2, color = "white", dashArray = 3,
fillColor = ~pal(Values), fillOpacity = 0.8,
highlightOptions = highlightOptions(
weight = 5, color = "#636363", bringToFront = TRUE
),
label = labs,
labelOptions = labelOptions(
textsize = "15px",
style = list("font-weight" = "normal")
)) %>%
addLegend(position = "bottomright",
pal = pal, values = ~Values, opacity = 0.8,
title = "Percentages",
labFormat = labelFormat(suffix = "%"))
})
為了加進度條,變成:
output$mapplot <- renderLeaflet({
withProgress(
value = 0, message = "地圖繪製中", detail = "製作說明標籤"
expr = {
# Define palettes
pal <- colorNumeric("YlOrRd", merge_map()$Values)
labs <- sprintf(
"<strong>%s</strong><br>%g%%", merge_map()$CountyTown, merge_map()$Values
) %>%
lapply(HTML)
incProgress(0.1, detail = "套疊地圖圖層")
# Map plotting
final_map <- leaflet(merge_map()) %>%
setView(121, 23.5, 7) %>%
addTiles()
incProgress(0.2, detail = "繪製各區域資料")
final_map <- addPolygons(final_map, weight = 2, color = "white",
dashArray = 3,
fillColor = ~pal(Values), fillOpacity = 0.8,
highlightOptions = highlightOptions(
weight = 5, color = "#636363", bringToFront = TRUE
),
label = labs,
labelOptions = labelOptions(
textsize = "15px",
style = list("font-weight" = "normal")
))
incProgress(0.5, detail = "製作圖例")
final_map <- addLegend(final_map, position = "bottomright",
pal = pal, values = ~Values, opacity = 0.8,
title = "Percentages",
labFormat = labelFormat(suffix = "%"))
incProgress(0.2, detail = "即將完成")
}
)
final_map
})
先不提每次的進度前進多少其實是我的主觀認定這件事,
要把原本的pipeline切開才能更新進度條也是有點麻煩。
最後更奇怪的是,進度條還是幾乎瞬間跑完,但地圖並沒有馬上出來...
我懷疑要把物件呈現上來本身也很花時間?
但是在這裡的倒數第二行"final_map"似乎不能包進withProgress裡面,
否則根本不會有地圖出來。
這樣提供的資訊夠嗎?
※ 編輯: clsmbstu (140.112.121.113), 08/23/2017 17:00:25
推 cywhale: 跑比較多polygon在leaflet 最後這一步的確會慢一些.. 08/23 22:04
→ cywhale: 不過如果用leafletProxy放不需要更新的部分,只更新新的 08/23 22:08
→ cywhale: addpolygon部分 不知道對最後這一步顯示速度有無幫助.. 08/23 22:09
→ clsmbstu: 感謝!我也有查到leafletProxy,但我是主觀猜測應該幫助 08/23 22:30
→ clsmbstu: 不大,畢竟我每次更換輸入就是要重畫超過350個polygons 08/23 22:31
→ clsmbstu: 而前面只是做到addTiles而已 QQ 08/23 22:32
推 locka: 請問clsmbstu大大是在一個addPolygons()裡超過350個多邊形( 08/23 23:14
→ locka: 例如全台鄉鎮)還是addPolygons()執行350次啊?? 08/23 23:14
→ clsmbstu: 是前者喔 我就是在畫全臺鄉鎮 XD 08/23 23:40