如何在R语言栅格绘制的黑海分布图中添加海岸线与陆地区域
给黑海栅格图添加陆地与边界的方法
可以借助rnaturalearth包获取高精度的全球陆地和国家边界数据,快速为你的黑海分布图补充地理要素,以下是修改后的完整实现方案:
步骤1:安装并加载所需扩展包
除你已有的包外,还需安装地理数据相关工具包:
install.packages(c("rnaturalearth", "rnaturalearthdata")) library(ncdf4) library(raster) library(rgdal) library(rnaturalearth)
步骤2:获取黑海区域的地理数据
通过ne_countries获取国家边界与陆地数据,再裁剪到黑海范围:
# 获取中等精度的全球陆地/国家数据 land <- ne_countries(scale = "medium", returnclass = "sp") # 定义黑海经纬度范围(可根据你的数据微调) blacksea_extent <- extent(27, 42, 40, 47) # 裁剪出黑海周边的陆地部分 land_blacksea <- crop(land, blacksea_extent)
步骤3:修改绘图代码,叠加地理要素
在原有栅格处理代码后,添加陆地填充与边界线条:
# 原有数据处理代码保持不变 nc_data0 <- nc_open("Biomass_Simu0.nc") biomass0 <- ncvar_get(nc_data0, "Biomass") nc_data1 <- nc_open("Biomass_Simu1.nc") biomass1 <- ncvar_get(nc_data1, "Biomass") lon <- ncvar_get(nc_data0, "longitude") lat <- ncvar_get(nc_data0, "latitude", verbose = F) Biomass_avg <- (biomass0 + biomass1 )/2 a <- apply(Biomass_avg, c(1,2,3), mean) r1 <- raster(t(a[ , , 1]), xmn=min(lon), xmx=max(lon), ymn=min(lat), ymx=max(lat), crs=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs+ towgs84=0,0,0")) r1 <- flip(r1, direction='y') # 绘制栅格底图 plot(r1, main = "黑海平均生物量分布") # 叠加陆地填充(灰色,可自定义颜色) plot(land_blacksea, col = "gray80", add = TRUE) # 叠加国家边界(黑色粗线条) plot(land_blacksea, border = "black", lwd = 1.5, add = TRUE)
可选:用ggplot2绘制更美观的可视化
如果偏好ggplot2风格,可采用以下代码:
library(ggplot2) # 将栅格转为数据框格式 r_df <- as.data.frame(r1, xy = TRUE) colnames(r_df)[3] <- "Biomass" ggplot() + geom_raster(data = r_df, aes(x = x, y = y, fill = Biomass)) + geom_polygon(data = land_blacksea, aes(x = long, y = lat, group = group), fill = "gray80", color = "black") + coord_sf(xlim = c(min(lon), max(lon)), ylim = c(min(lat), max(lat))) + scale_fill_viridis_c(option = "plasma") + labs(title = "黑海平均生物量分布", x = "经度", y = "纬度", fill = "生物量") + theme_minimal()
内容的提问来源于stack exchange,提问作者rocinantes
相关产品推荐
相关产品推荐

