我有一个群岛(斐济)的光栅,其中包括海洋扩展的海洋测量值(即负值)和岛屿陆地的海拔高度数据(即正值) - 见附件。我在R中使用rasterVis包并想要为地图着色,因此测深数据是蓝色阴影,而陆地是绿色阴影。我正在使用brewer.pal生成蓝色和绿色调色板然后将它们组合为主题然后使用“levelplot”函数和'at ='选项来确定从蓝色到绿色的交叉点(具有来自最低测深的编号序列)点 - -5150m' - 到最高的山峰 - 1200m。尽管在'at ='内改变了seq长度值(很多次)但我无法让交叉以零为中心(即从海洋到陆地的过渡 - 图像上的图例显示零是蓝色,因此岛屿陆地太小了。这是我的代码和附件是我能得到的最好的情节。此外,如果有人知道如何覆盖斐济的轮廓图顶部也会很棒(似乎我不能用'map'功能)。
fj<-raster('FJ.asc')
greens<-brewer.pal(9,"Greens")[c(5,6,7,8,9)]
blues<-rev(brewer.pal(9,"Blues")[c(4,5,6,7,8,9)])
myTheme<- rasterTheme(region = c(blues, greens))
col_breaks = c(seq(-5150,-0.0001,length=50), seq(0.0001,1200,length=50))
levelplot(fj, par.settings = myTheme, at=col_breaks)
抱歉,我无法附上我的ascii raster
非常感谢
克里夫
答案 0 :(得分:0)
添加一个等高线图(我没有斐济DEM,我用了更少的休息时间):
levelplot(fj, par.settings = myTheme, at=col_breaks) + contourplot(fj, at = 0.0001 , labels = F)
在0附近添加更多休息时间:
levelplot(fj, par.settings = myTheme, at=col_breaks) + contourplot(fj, at = c(-0.00001,0,0.0001) , labels = F)
使用带有陆地边界的矢量文件(您可以在Diva-GIS layers上获取它:
shp <- raster::shapefile('path/to/shapefile.shp')
if (proj4string(fj) != proj4string(shp)) {
shp <- spTransform(shp, proj4string(fj))
}
levelplot(fj, par.settings = myTheme, at=col_breaks) + layer(sp.polygons(shp))