我希望在 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()
我使用这段代码来实际构建热图,我相信这应该是正确的。我的问题是改变边界。 该图应该看起来像这样。在这里,作者使用河流流域在热图上分配不同的区域。我的热图只需要单独的岛屿。
实现此目的的最简单方法是结合使用
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()
为了进一步说明,这是婆罗洲在小分辨率下的特写:
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()