R rasterVis levelplot:错误地出现白线

问题描述

我正在绘制大气污染物场或气象场的地图,这些场之间的差异通常与地形重叠。 我的字段已网格化。

神秘地出现一条白线,有时是两条。

这似乎有点随机。我的意思是:相同的代码和字段,相同的行;但是当我改变字段或色阶时,它会改变位置,或者消失,或者出现另一个。有时水平,有时垂直。

这是我的代码

#!/usr/bin/env Rscript

library(rasterVis)
library(RColorBrewer)

NX <- 468
NY <- 421
hgt <- matrix(0.,NX,NY)

# read from file:
ucon <- file("hgt.dat",open="rb")
for (n in seq(1,NX)) {
  hgt[n,] <- readBin(ucon,"numeric",n=NY,size=4)
}
close(ucon)

hgtbks <- c(-100,10,500,1000,1500,2000,2500,3000,3500)
hgtcols <- colorRampPalette(c("gray30","white"))(length(hgtbks)-1)

tit <- "Orography"

bkstart=50.0; bkmax=1500.; bkby=100.
bks <- seq(bkstart,bkmax,bkby)
nbks <- length(bks)

cols <- rev(colorRampPalette(brewer.pal(11,"Spectral"))(nbks-2))
cols <- c("white",cols)

legendbreaks <- seq(1,nbks)
legendlabels <- formatC(bks,digits=3)
legendlabpos <- legendbreaks


rpl <-
  levelplot(hgt,margin=FALSE,col.regions= hgtcols,at= hgtbks,main= list(label=tit,cex=1.8),colorkey=list(draw= TRUE,col=cols,at=legendbreaks,labels=list(labels=legendlabels,at=legendlabpos,cex=1.2)),xlab=NULL,ylab=NULL,scales= list(draw= FALSE))

png("whiteline.png",width=800,height=840)
plot(rpl)
graphics.off()

我真的很想上传一个包含我的数据的文件,但目前 我找不到办法做到这一点(我认为我做不到,甚至 ASCII 文件都做不到)。数据矩阵(468x421)太大,无法明确包含在代码中,但它确实是地形文件 如图所示(平均海平面以上的海拔高度,单位为米)。

这是生成的“白线”地图:

1

真的,我认为这可能是一个关卡错误。当 hgt 是一个矩阵和一个合适的光栅对象时,它似乎都会发生:这似乎没有什么区别。 有什么想法吗?

解决方法

我想我找到了解决方法。 通过在 4 个边上设置零填充,我设法使白线从一系列地图中消失。 首先我定义:

zpadding <- list(layout.heights= list(top.padding=0,bottom.padding=0),layout.widths= list(left.padding=0,right.padding=0))

然后我在 levelplot 调用的参数中添加:

par.settings=zpadding

正如我所说,我认为这不是一个合适的解决方案,而是一种解决方法。

问题似乎与绘图区域的任何重新缩放有关。

事实上,当强制重新缩放时,例如,在颜色条标签中有 4 或 5 位数字(而不是 2 或 3 位)时,可能会再次出现白线。

我希望这可以为其他人指明正确的方向,无论是 levelplot 和相关软件的用户还是开发人员。