【问题标题】:R rasterVis levelplot: a white line erroneously appearsR rasterVis levelplot:错误地出现一条白线
【发布时间】:2021-06-23 03:43:06
【问题描述】:

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

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

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

这是我的代码

#!/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) 太大,无法显式包含在代码中,但它确实是地形文件 如图所示(平均海平面以上的海拔高度)。

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

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

【问题讨论】:

  • 如果您可以共享您的数据,以便其他人可以使用它并更有效地帮助您,也许会更好。
  • @AnoushiravanR ,我无法上传我的二进制数据文件(我认为我不能,甚至不能上传 ASCII 文件)。数据矩阵为 468x421,太大而无法显式包含在代码中。它包含 -100:5000 范围内的浮点数(以米为单位的平均海平面以上的高度)。而且不知道为什么今天上传的新图片不能嵌入到文字中
  • 我在这方面没有太多经验,但是如果贡献者要帮助你,分享你的数据是必不可少的。否则不会引起任何反应。只需尝试dput(head(data)) 并将输出复制到您的问题中,这样您就有更多机会获得相关结果。
  • 我对 ggplot2 和 geom_tile 也有同样的问题。在这种情况下,我按照“设置小边距”的建议成功了:stackoverflow.com/questions/36334363/… 像这样:“myplot
  • 很抱歉,我希望能帮上忙。我建议您再次编辑您的问题,以便它出现在网站的主页上,并且可能会吸引新的回复。

标签: r lattice levelplot rastervis


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多