在 R 中创建带有自定义标签的 Leaflet 地图
Creating a Leaflet map with custom labels in R
我想使用 R 中的世界地图可视化我的数据,其中要在特定点(给定坐标)添加标签。标签应该是一些 3D 矩形,其高度与数据 table 中的值成比例。我会使用 R 包 "leaflet"(或任何替代方案,如果更好的话)。全世界大约有10-15个点,每个位置有两个值(具体来说,点是主要油田的位置,值是例如规模和储量)。我希望每个点都有两个这样的 3D 矩形,比方说,红色和蓝色彼此靠近,具有适当的高度和数字,每个点都标有油田的名称。我用 leaflet 包找到了解决方案,在地图上添加了适当半径的圆圈。
数据和库由代码加载:
library(leaflet)
basins<-read.csv("somedata.csv")
而somedata.csv具有以下结构(四个数据线仅作为最小工作示例):
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 中的盆 table).
我想复制看起来像这张由 GMT 制作的图像的东西。有一个普通的 (2D) 地图就足够了,但是每个点都需要两个这样的矩形,每个矩形都有字段名称和值。
图片来自 GMT 包
您可以在包 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。
我想使用 R 中的世界地图可视化我的数据,其中要在特定点(给定坐标)添加标签。标签应该是一些 3D 矩形,其高度与数据 table 中的值成比例。我会使用 R 包 "leaflet"(或任何替代方案,如果更好的话)。全世界大约有10-15个点,每个位置有两个值(具体来说,点是主要油田的位置,值是例如规模和储量)。我希望每个点都有两个这样的 3D 矩形,比方说,红色和蓝色彼此靠近,具有适当的高度和数字,每个点都标有油田的名称。我用 leaflet 包找到了解决方案,在地图上添加了适当半径的圆圈。
数据和库由代码加载:
library(leaflet)
basins<-read.csv("somedata.csv")
而somedata.csv具有以下结构(四个数据线仅作为最小工作示例):
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 中的盆 table).
我想复制看起来像这张由 GMT 制作的图像的东西。有一个普通的 (2D) 地图就足够了,但是每个点都需要两个这样的矩形,每个矩形都有字段名称和值。
图片来自 GMT 包
您可以在包 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。