Создание карты Leaflet с пользовательскими метками в R

Я хотел бы визуализировать свои данные, используя карту мира в R, где метки должны быть добавлены в определенных точках (с заданными координатами). Надписи должны представлять собой несколько 3D-прямоугольников с высотами, пропорциональными значению из таблицы данных. Я бы использовал пакет "буклет" R (или любой другой вариант, если лучше). По всему миру насчитывается около 10-15 точек, и для каждого местоположения существует два значения (в частности, точки - это местоположения крупных нефтяных месторождений, а значения - это, например, размер и запасы). Я хочу иметь два таких трехмерных прямоугольника для каждой точки, скажем, красного и синего, стоящих рядом друг с другом, с соответствующими высотами и цифрами на них, и каждая точка должна быть помечена названием нефтяного месторождения. Я нашел решение с пакетом листовок, добавив круги на карту с соответствующим радиусом.

Данные и библиотеки загружаются кодом:

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).

Я хотел бы воспроизвести что-то похожее на это изображение, которое было создано GMT. Было бы достаточно иметь простую (2D) карту, однако для каждой точки необходимы два таких прямоугольника с именем поля и значениями для каждого прямоугольника.

Изображение из пакета GMT

1 ответ

Решение

Вы можете добавить гистограмму с помощью пакета 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 для простоты.

введите описание изображения здесь

Другие вопросы по тегам