tablueau地图标记圆形_R语言在线地图神器:Leaflet for R包(三) 符号标记
如果還是直接寫,會出現(xiàn)錯誤提示,說找不到經(jīng)緯度的列
像這種情況,就需要進行顯式申明了:(順便換個背景底圖)
leaflet(dh)%>%addProviderTiles("Esri.WorldStreetMap")%>%setView(116.4,39.9,zoom=10)%>%addMarkers(~x,~y,popup=~mc)
如果你覺得這種默認的圖釘樣式不好看,還可以定制自己的符號,比如我下面想用紅十字來表示醫(yī)院:
首先用makeIcon這個方法,來定義一個圖標,注意里面Url必須是要用http模式,我這里用csdn提供的免費圖床,本地硬盤上的圖片好像是不能直接用的。(ps:如果不想用互聯(lián)網(wǎng)的圖床,也可以在本地開啟一個web服務器,使用url方式來引用)。
makeIcon的語法如下:
iconUrl: 圖標的url地址
iconWidth:圖標的寬度
iconHeight: 圖標的高度
iconAnchorX:圖標的中心點x軸偏移(以左上角為0,0)
iconAnchorY:圖標的中心點Y軸偏移(以左上角為0,0)
redIcon
iconUrl = "https://img-blog.csdn.net/20161015170050664",
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
)
leaflet(bj3H[])%>%addTiles()%>%
addMarkers(popup=~mc,icon = redIcon)
有時候還需要配置不同的圖標來顯示不同的內(nèi)容,當然最簡單的方式就是分批次加載不同的數(shù)據(jù):先定義兩個不同的符號,然后篩選數(shù)據(jù),分批次加載,三級醫(yī)院用傳統(tǒng)紅十字,三級甲等用鑲邊紅十字,如下:
redIcon1
iconUrl = "https://img-blog.csdn.net/20161015170050664",
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
)
redIcon2
iconUrl = "https://img-blog.csdn.net/20161015173507516",
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
)
leaflet()%>%addTiles()%>%
addMarkers(data=bj3H[bj3H$dj=="三級",],popup=~mc,icon = redIcon1)%>%
addMarkers(data=bj3H[bj3H$dj=="三級甲等",],popup=~mc,icon = redIcon2)
這種方法雖然比較容易控制,但是語法稍微顯得有些繁瑣了,leaflet的makeIcon包還支持r語言提供的ifelse()函數(shù)進行設定,如下所示:(為了表示是重新運行過的,換個底圖)
leafIcons
iconUrl = ifelse(bj3H$dj=="三級",
"https://img-blog.csdn.net/20161015170050664",
"https://img-blog.csdn.net/20161015173507516"
),
iconWidth = 38, iconHeight = 38,
iconAnchorX = 19, iconAnchorY = 19
)
leaflet(bj3H)%>%addProviderTiles("CartoDB.Positron")%>%
addMarkers(popup=~mc,icon = leafIcons)
當然,以此類推,還可以修改符號大小神馬啊,設定符號等級啊神馬的,我這里就不一一說明了,大家有興趣自己玩。
還有同學問,如果我有很多類圖標呢?比如二十類……蝦神咋辦?好吧,如果你有超過3類圖標的話,要么用第一種方法篩選加載,要么的話,leaflet還提供了一個叫做iconList的方法來處理。
比如上面這份醫(yī)療數(shù)據(jù),一共分成10種類型:(用summary方法做個統(tǒng)計)
fl
那么下面我用十種不同類型的圖標,來進行分類標識:
yyIcons
中國醫(yī)科院所屬醫(yī)院 = makeIcon("https://img-blog.csdn.net/20161015181859390", iconWidth =32, iconHeight = 32),
北京區(qū)縣屬醫(yī)院 = makeIcon("https://img-blog.csdn.net/20161015182217958", iconWidth =32, iconHeight = 32),
北京市衛(wèi)生局直屬醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015181915828",iconWidth =32, iconHeight = 32),
北京中醫(yī)藥大學= makeIcon("https://img-blog.csdn.net/20161015181934175",iconWidth =32, iconHeight = 32),
衛(wèi)生部直屬醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015181950879",iconWidth =32, iconHeight = 32),
中國中醫(yī)科學院= makeIcon("https://img-blog.csdn.net/20161015182031737",iconWidth =32, iconHeight = 32),
駐京武警醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182043285",iconWidth =32, iconHeight = 32),
駐京部隊醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182054598",iconWidth =32, iconHeight = 32),
部屬廠礦高校醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182109473",iconWidth =32, iconHeight = 32),
北京大學附屬醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182132521",iconWidth =32, iconHeight = 32)
)
leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron") %>%
addMarkers(icon = ~yyIcons[fl],popup=~fl)
當數(shù)據(jù)太多的時候,很容易疊加在一起互相遮蓋了,leaflet還提供了空間聚合的方法,可以按照視圖對一定范圍內(nèi)的數(shù)據(jù)進行聚合顯示,如下:
leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron") %>%
addMarkers(clusterOptions = markerClusterOptions(),icon = ~yyIcons[fl],popup=~fl)
可以看見,隨著視圖比例尺的變化,會進行聚合以及分離
而如果不想弄得這么麻煩,就是直接把點顯示出來,leaflet提供了最簡單的方法:
addCircles()和addCircleMarkers()
addCircles就是直接把點當成一個圓點繪制到地圖上:
leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircles()
默認大小為5,顏色為藍色
當然也可以設置顏色和大小,比如設置為紅色,大小為科室數(shù)量(等比例的縮小一半):
leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircles(color="red",weight=bj3H$ks/2)
而addCircleMarkers()是把點作為一個鑲邊的圓(或者說圓符號)繪制到地圖上:
leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircleMarkers()
當然,同樣可以設置大小和顏色:
leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircleMarkers(color="red",weight=bj3H$ks/2)
和繪制圖標一樣,繪制點和圓也是可以設置分類顯示的,方法和繪制不同種類的圖標一樣,兩種方法:
1、采用篩選的方式,多次繪制(這個比較麻煩,數(shù)據(jù)量大,種類多的時候很繁瑣)
leaflet()%>%addTiles()%>%addProviderTiles("CartoDB.Positron")%>%
addCircles(data=bj3H[bj3H$dj=="三級",],popup=~mc,color="green")%>%
addCircles(data=bj3H[bj3H$dj=="三級甲等",],popup=~mc,color="red")
leaflet()%>%addTiles()%>%addProviderTiles("CartoDB.Positron")%>%
addCircleMarkers(data=bj3H[bj3H$dj=="三級",],popup=~mc,color="green")%>%
addCircleMarkers(data=bj3H[bj3H$dj=="三級甲等",],popup=~mc,color="red")
2、就是采用分類設定的方式,預先設定好各種分類:(因為addCircles和addCircleMarkers)兩個方法幾乎一模一樣,我就不把兩個都寫一遍了,有興趣的同學自己嗨。
pal
leaflet(bj3H) %>% addProviderTiles("Esri.WorldTopoMap") %>%
addCircleMarkers(color = ~pal(dj),stroke = FALSE,fillOpacity = 0.7)
可以看見,我們只寫了兩個分類,如果要更多的類別,也是可以的。
那么很多時候,我們可能還需要通過通過數(shù)值來進行不同等級的顏色渲染,下面根據(jù)每個醫(yī)院的床位數(shù)進行顏色渲染,代碼如下:(代碼具體的意義,在后面講圖例的時候,我們還會詳細說明)
cPal
leaflet(bj3H) %>% addProviderTiles("Esri.WorldTopoMap") %>%
addCircleMarkers(fillColor = ~cPal(bj3H$cws),stroke = FALSE,fillOpacity = 0.8,popup=~as.character(cws))%>%
總結(jié)
以上是生活随笔為你收集整理的tablueau地图标记圆形_R语言在线地图神器:Leaflet for R包(三) 符号标记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 依赖注入底层反射原理_PHP基于反射机制
- 下一篇: java offsetdatetime_