日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

tablueau地图标记圆形_R语言在线地图神器:Leaflet for R包(三) 符号标记

發(fā)布時間:2025/3/15 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tablueau地图标记圆形_R语言在线地图神器:Leaflet for R包(三) 符号标记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果還是直接寫,會出現(xiàn)錯誤提示,說找不到經(jīng)緯度的列

像這種情況,就需要進(jìn)行顯式申明了:(順便換個背景底圖)

leaflet(dh)%>%addProviderTiles("Esri.WorldStreetMap")%>%setView(116.4,39.9,zoom=10)%>%addMarkers(~x,~y,popup=~mc)

如果你覺得這種默認(rèn)的圖釘樣式不好看,還可以定制自己的符號,比如我下面想用紅十字來表示醫(yī)院:

首先用makeIcon這個方法,來定義一個圖標(biāo),注意里面Url必須是要用http模式,我這里用csdn提供的免費(fèi)圖床,本地硬盤上的圖片好像是不能直接用的。(ps:如果不想用互聯(lián)網(wǎng)的圖床,也可以在本地開啟一個web服務(wù)器,使用url方式來引用)。

makeIcon的語法如下:

iconUrl: 圖標(biāo)的url地址

iconWidth:圖標(biāo)的寬度

iconHeight: 圖標(biāo)的高度

iconAnchorX:圖標(biāo)的中心點(diǎn)x軸偏移(以左上角為0,0)

iconAnchorY:圖標(biāo)的中心點(diǎn)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)

有時候還需要配置不同的圖標(biāo)來顯示不同的內(nèi)容,當(dāng)然最簡單的方式就是分批次加載不同的數(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ù)進(jìn)行設(shè)定,如下所示:(為了表示是重新運(yùn)行過的,換個底圖)

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)

當(dāng)然,以此類推,還可以修改符號大小神馬啊,設(shè)定符號等級啊神馬的,我這里就不一一說明了,大家有興趣自己玩。

還有同學(xué)問,如果我有很多類圖標(biāo)呢?比如二十類……蝦神咋辦?好吧,如果你有超過3類圖標(biāo)的話,要么用第一種方法篩選加載,要么的話,leaflet還提供了一個叫做iconList的方法來處理。

比如上面這份醫(yī)療數(shù)據(jù),一共分成10種類型:(用summary方法做個統(tǒng)計(jì))

fl

那么下面我用十種不同類型的圖標(biāo),來進(jìn)行分類標(biāo)識:

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ī)藥大學(xué)= 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ī)科學(xué)院= makeIcon("https://img-blog.csdn.net/20161015182031737",iconWidth =32, iconHeight = 32),

駐京武警醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182043285",iconWidth =32, iconHeight = 32),

駐京部隊(duì)醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182054598",iconWidth =32, iconHeight = 32),

部屬廠礦高校醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182109473",iconWidth =32, iconHeight = 32),

北京大學(xué)附屬醫(yī)院= makeIcon("https://img-blog.csdn.net/20161015182132521",iconWidth =32, iconHeight = 32)

)

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron") %>%

addMarkers(icon = ~yyIcons[fl],popup=~fl)

當(dāng)數(shù)據(jù)太多的時候,很容易疊加在一起互相遮蓋了,leaflet還提供了空間聚合的方法,可以按照視圖對一定范圍內(nèi)的數(shù)據(jù)進(jìn)行聚合顯示,如下:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron") %>%

addMarkers(clusterOptions = markerClusterOptions(),icon = ~yyIcons[fl],popup=~fl)

可以看見,隨著視圖比例尺的變化,會進(jìn)行聚合以及分離

而如果不想弄得這么麻煩,就是直接把點(diǎn)顯示出來,leaflet提供了最簡單的方法:

addCircles()和addCircleMarkers()

addCircles就是直接把點(diǎn)當(dāng)成一個圓點(diǎn)繪制到地圖上:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircles()

默認(rèn)大小為5,顏色為藍(lán)色

當(dāng)然也可以設(shè)置顏色和大小,比如設(shè)置為紅色,大小為科室數(shù)量(等比例的縮小一半):

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircles(color="red",weight=bj3H$ks/2)

而addCircleMarkers()是把點(diǎn)作為一個鑲邊的圓(或者說圓符號)繪制到地圖上:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircleMarkers()

當(dāng)然,同樣可以設(shè)置大小和顏色:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircleMarkers(color="red",weight=bj3H$ks/2)

和繪制圖標(biāo)一樣,繪制點(diǎn)和圓也是可以設(shè)置分類顯示的,方法和繪制不同種類的圖標(biāo)一樣,兩種方法:

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、就是采用分類設(shè)定的方式,預(yù)先設(shè)定好各種分類:(因?yàn)閍ddCircles和addCircleMarkers)兩個方法幾乎一模一樣,我就不把兩個都寫一遍了,有興趣的同學(xué)自己嗨。

pal

leaflet(bj3H) %>% addProviderTiles("Esri.WorldTopoMap") %>%

addCircleMarkers(color = ~pal(dj),stroke = FALSE,fillOpacity = 0.7)

可以看見,我們只寫了兩個分類,如果要更多的類別,也是可以的。

那么很多時候,我們可能還需要通過通過數(shù)值來進(jìn)行不同等級的顏色渲染,下面根據(jù)每個醫(yī)院的床位數(shù)進(jìn)行顏色渲染,代碼如下:(代碼具體的意義,在后面講圖例的時候,我們還會詳細(xì)說明)

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。