如何在marmap包的autoplot.bathy()中隐藏或淡化陆地?
解决autoplot.bathy绘制地中海时陆地干扰的问题
方法1:完全隐藏陆地
直接将bathy对象中海拔高于0的区域设为缺失值,ggplot渲染时会跳过这些区域,只保留海洋地形:
med <- getNOAA.bathy(lon1=-5, lon2=36.24583, lat1=30.25417, lat2=45) # 把陆地(海拔>0)标记为缺失值 med[med > 0] <- NA autoplot.bathy(med, geom=c("r", "c"), colour="white", alpha=0.7) + scale_fill_etopo() + # 取消注释添加你的散点和分面设置 # geom_point(aes(x=Longitude, y=Latitude, col=as.factor(class)), data=newdf, alpha=0.8) + # facet_grid(id ~ .) + xlab("Longitude") + ylab("Latitude")
方法2:淡化陆地(保留轮廓但降低干扰)
如果不想完全去掉陆地,可自定义填充渐变,把陆地部分设为低存在感的浅色调,同时保留海洋的渐变效果:
med <- getNOAA.bathy(lon1=-5, lon2=36.24583, lat1=30.25417, lat2=45) autoplot.bathy(med, geom=c("r", "c"), colour="white", alpha=0.7) + scale_fill_gradientn( # 自定义配色:从深海蓝到浅海蓝,再到浅灰(陆地) colours = c("#00008B", "#1E90FF", "#87CEEB", "#F5F5F5"), # 映射海拔区间到颜色位置,0是海陆分界点 values = scales::rescale(c(-8000, -2000, 0, 1000)), limits = c(-8000, 1000), guide = "colourbar" ) + # 后续图层 xlab("Longitude") + ylab("Latitude")
两种方法都不会破坏海洋的渐变效果,你可以根据需求选择。如果用方法1,后续添加散点和分面的代码直接取消注释即可正常运行。
内容的提问来源于stack exchange,提问作者Jcarroll
相关产品推荐
相关产品推荐

