使用R中的自定义标签创建传单图

问题描述:

我想使用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

您可以用包的帮助下添加条形图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。 –