2017-08-07 99 views
3

我想使用R中的世界地圖可視化我的數據,其中標籤要在特定點(給定座標)處添加。標籤應該是一些高度與數據表中的值成比例的3D矩形。我會使用R包「小冊子」(或者其他更好的選擇)。全世界大約有10-15個點,每個位置有兩個值(具體來說,點是主要油田的位置,值例如是大小和儲量)。我希望每個點都有兩個這樣的3D矩形,可以說,紅色和藍色彼此靠近,高度合適,數字相同,並且每個點都標註油田名稱。我用小冊子包找到了解決方案,用適當的半徑向地圖添加圓圈。使用R中的自定義標籤創建傳單圖

的數據和庫由代碼加載:

library(leaflet) 
basins<-read.csv("somedata.csv") 

而且somedata.csv具有以下結構(4個datalines僅作爲最小的工作實施例):

basin,lat,lon,res.density,rel.area 
Central Sumatra,1,96,16.7,75 
North Sea,58.4,2,20,24 
Maracaibo basin,9,-71,74.4,14.3 
Los Angeles,33,-118,31.2,32 

圓圈標記的地圖由命令調用

m=leaflet(data = basins) %>% addTiles() %>% addCircleMarkers(~lon, ~lat , popup = ~as.character(basin),radius=~res.density*0.4,label=~htmlEscape(basin),labelOptions=labelOptions(noHide=T,textOnly=TRUE,direction="bottom")) 

但是,這種解決方案並不好,因爲它不允許可視化第二個值(通過參數radius =〜res.density,其中res.density是我的.csv表中第一個值的名稱)。

我想再現一些看起來像這張圖片的東西,它是由GMT製作的。具有平面(2D)地圖就足夠了,但每個點需要兩個這樣的矩形,字段的名稱和每個矩形的值。從GMT包

圖片

enter image description here

回答

6

您可以用包的幫助下添加條形圖leaflet.minicharts如下:

library("leaflet") 
library("htmltools") 
library("leaflet.minicharts") 

basins <- read.table(text="basin,lat,lon,res.density,rel.area 
Central Sumatra,1,96,16.7,75 
North Sea,58.4,2,20,24 
Maracaibo basin,9,-71,74.4,14.3 
Los Angeles,33,-118,31.2,32", header=T, sep=",") 

leaflet(data = basins) %>% 
    addProviderTiles("OpenStreetMap.Mapnik") %>% 
    addLabelOnlyMarkers(lng = ~lon, lat = ~lat, label = ~htmlEscape(basin), 
         labelOptions = labelOptions(noHide = TRUE, textOnly = TRUE, 
                direction = "bottom", offset = c(0,5))) %>% 
    addMinicharts(basins$lon, basins$lat, type = "bar", 
       chartdata = basins[, c("res.density", "rel.area")], width = 50, height = 60) 

可能的話,你可以離開了addCircleMarkers爲簡單起見。

enter image description here

+0

這是一個很好的包。是否可以調整圖例以便給出自定義解釋,而不僅僅是變量的名稱? leaflet.minicharts文檔沒有提到這個選項。當然,可以用%>%addLegend手動添加圖例,但是minicharts的正確圖例看起來在樣式上很好 – astrsk

+0

從包文檔中,參數addMinicharts可以調整圖例的位置。如果您想在圖例中使用不同的字符串,只需更改列的名稱即可。否則,請去addLegend。 –

相關問題