0

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

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

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

这是我的代码

#!/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

1 回答 1

0

我想我找到了解决方法。通过在 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 和相关软件的用户还是开发人员。

于 2021-07-05T11:18:20.400 回答