如何制作没有政治边界、只有沿海边界的世界地图?

问题描述 投票:0回答:1

我希望在 R 中制作一个热图来显示世界各地岛屿的多样性,但我很难找到正确的方法来做到这一点。我之前曾使用 ggplot2 和地图包制作过美国各州和世界各国的热图,但这次我找不到合适的模板来使用。热图中的边界确实需要基于自然地理,而不是政治地理。例如,像伊斯帕尼奥拉岛和婆罗洲这样的岛屿需要是一个实体(而不是 2 个或 3 个国家),而像爪哇岛和苏门答腊岛这样的岛屿需要是单独的实体(而不是一个国家)。如果这样的模板不存在,有什么办法可以手动完成吗?

我尝试使用 ggplot2 默认世界地图来创建我的热图,但我无法分割/合并国家/地区来显示我想要的实际信息。

plot1 <-ggplot(map.df, aes(x=long,y=lat,group=group))+
  geom_polygon(aes(fill=species))+
  geom_path()+ 
  scale_fill_gradientn(colours=rev(heat.colors(50)),na.value="grey90")+
  coord_map()

我使用这段代码来实际构建热图,我相信这应该是正确的。我的问题是改变边界。 该图应该看起来像这样。在这里,作者使用河流流域在热图上分配不同的区域。我的热图只需要单独的岛屿。

r ggplot2 heatmap
1个回答
1
投票

实现此目的的最简单方法是结合使用

rnaturalearth
包中的海岸线和国家/地区数据集。对于您提到的所有岛屿,这两个数据都没有特定的岛屿属性,但对于您的用例来说,这并不重要。

此示例使用两个数据集的最不详细的分辨率,如果您在整个世界范围内进行映射,则这是可以的。如果您需要更精细的分辨率,请将

small
更改为
medium
large
。系统可能会提示您安装另一个
rnaturalearth
软件包以获得更详细的版本。

library(rnaturalearth)
library(sf)
library(ggplot2)

# Load countries and coastline sf data
countries <- ne_countries(scale = "small")
coast <- ne_coastline(scale = "small")

# Plot
ggplot() +
  geom_sf(data = countries, colour = "lightgrey", fill = "lightgrey") +
  geom_sf(data = coast, colour = "grey50") +
  theme_void()

result

为了进一步说明,这是婆罗洲在小分辨率下的特写:

ggplot() +
  geom_sf(data = countries, colour = "lightgrey", fill = "lightgrey") +
  geom_sf(data = coast, colour = "grey50") +
  labs(title = "Borneo") +
  coord_sf(xlim = c(107, 120),
           ylim = c(-5, 7)) +
  theme_void()

borneo

© www.soinside.com 2019 - 2024. All rights reserved.