заполненная карта + карта местоположения в R - PullRequest
0 голосов
/ 06 марта 2020

Перефразируя вопрос ... Я готовлю отчет, и одна его часть - пространственная, а именно:

У меня есть 2 набора данных. Первый (Счета) это страны с их оценками. Второй (Местоположения) - это точная долгота и широта, которые указывают точное местоположение внутри этих стран. Пусть это будут примеры:

Scores = data.frame( Country = c("Lebanon","UK","Chille"), Score =c(1,3.5,5))
Locations = data.frame(Location_Name = c("London Bridge", "US Embassy in Lebanon" , "Embassy of Peru in Santiago"),
                       LONG = c(-0.087749, 35.596614, -70.618236), 
                       LAT = c(51.507911, 33.933586, -33.423285))

То, чего я хочу достичь, - это заполнить карту мира (в моем наборе данных у меня есть каждая страна) и раскрасить внутри ее границ с помощью Score (Scores $ Score) на непрерывный масштаб. Кроме того, я хотел бы добавить булавки, пузырьки или любой другой маркер Locations from Locations dataframe.

Поэтому мой желаемый результат - это комбинация этого вида: Filled map

и этот вид:

Location map

В идеале я хотел бы также иметь возможность рисовать радиус 2 км вокруг данных Locations from Locations data.frame.

Я знаю, что делать их отдельно, но, кажется, не могу добиться этого на одной хорошей чистой карте.

Я действительно ценю любую помощь или советы по этому вопросу, застрял на целый день на этом

1 Ответ

2 голосов
/ 08 марта 2020

По предложению @agila вы можете использовать пакет tmap.

Сначала объедините ваши данные Scores с World, чтобы вы могли заполнить страны на основе данных Scores. Обратите внимание, что ваш столбец Country должен точно соответствовать name в Мире при объединении.

Вам потребуется использовать пакет st_as_sf из sf, чтобы ваш Locations объект sf Добавить к карте.

tm_dots может показывать баллы. Альтернативой для пузырьков является tm_bubbles.

library(tmap)
library(sf)

data(World)

Scores = data.frame(Country = factor(c("Mexico","Brazil","Chile"), levels = levels(World$name)), 
                    Score =c(1,3.5,5))
Locations = data.frame(Location_Name = c("Rio de Janeiro", "US Embassy in Lebanon" , "Embassy of Peru in Santiago"),
                       LONG = c(-43.196388, 35.596614, -70.618236), 
                       LAT = c(-22.908333, 33.933586, -33.423285))

map_data <- merge(World, Scores, by.x = "name", by.y = "Country", all = TRUE)

locations_sf <- st_as_sf(Locations, coords = c('LONG', 'LAT'))

tm_shape(map_data) +
  tm_polygons("Score", palette = "-Blues") +
  tm_shape(locations_sf) +
  tm_dots(size = .1)

Карта

world map with filled countries and points of interest

...