首页 > 解决方案 > R中的填充地图+位置图

问题描述

重新表述这个问题......我正在准备报告,其中一部分是空间即。

我有 2 个数据集。First(Scores) 是有分数的国家。第二个(位置)是精确的经度和纬度,指的是这些国家/地区内的确切位置。举个例子:

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

我想要实现的是获得填充的世界地图(在我的数据集中,我有每个国家)并在其边界内以连续比例的分数(Scores$Score)着色。最重要的是,我想从 Locations 数据框中添加图钉、气泡或任何位置标记。

所以我想要的结果将是这种观点的结合: 填充地图

这个观点:

位置图

理想情况下,我还希望能够从 Locations data.frame 中围绕 Locations 绘制 2 公里半径。

我知道分开做,但似乎无法在一张漂亮的干净地图上实现。

我真的很感谢这方面的任何帮助或提示,在那一整天都被困住了

标签: rdictionaryggplot2geolocationrworldmap

解决方案


正如@agila 所建议的,您可以使用该tmap软件包。

首先合并您的Scores数据,World以便您可以根据Scores数据填充国家/地区。请注意,合并时您的Country列应与in World 完全匹配。name

您将需要使用st_as_sffrom sfpackage 来制作要添加到地图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)

地图

充满国家和兴趣点的世界地图


推荐阅读