R中的填充地图+位置图
filled map + location map in 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 周围绘制 2km 半径。
我知道分开做,但似乎无法在一张漂亮干净的地图上实现。
我真的很感谢任何关于这方面的帮助或提示,在那个问题上卡了一整天
根据@agila 的建议,您可以使用 tmap
包。
首先将您的 Scores
数据与 World
合并,这样您就可以根据 Scores
数据填充国家/地区。请注意,您的 Country
列在合并时应与 World 中的 name
完全匹配。
您需要使用 sf
包中的 st_as_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)
地图
重新表述问题...我正在准备报告,其中一部分是空间,即。
我有 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 周围绘制 2km 半径。
我知道分开做,但似乎无法在一张漂亮干净的地图上实现。
我真的很感谢任何关于这方面的帮助或提示,在那个问题上卡了一整天
根据@agila 的建议,您可以使用 tmap
包。
首先将您的 Scores
数据与 World
合并,这样您就可以根据 Scores
数据填充国家/地区。请注意,您的 Country
列在合并时应与 World 中的 name
完全匹配。
您需要使用 sf
包中的 st_as_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)
地图