【问题标题】:how to use same color intervals for different spplots in R如何在 R 中为不同的 spplots 使用相同的颜色间隔
【发布时间】:2014-03-12 12:20:38
【问题描述】:

我有不同日子的温度数据插值图,比如:

我想并排显示不同日子的地图,但希望两者在传奇中具有相同的颜色渐变和间隔。 最高温度值为:29.8 分钟:-13.4

我确实尝试使用来自How to use the same color scale for points in different maps in R? 的答案,但这样做确实出错了:

maxim <- 30
minim <- -14
cuts <- 2*(-7:15)
p1 <- spplot(idw_ger, "var1.pred", main="IDW January, 10", cuts=cuts, col.regions=bpy.colors(30)) +
latticeExtra::layer(sp.polygons(ger, fill = NA, col = 'blue')) +
latticeExtra::layer(sp.points(tdata,
                            fill = NA, col = 'black'))

seq.default(zrng1, zrng[2], length.out = cut + 2) 中的错误: 长度必须是非负数 另外:警告信息: 在 seq.default(zrng1, zrng[2], length.out = cut + 2) 中: 'length.out' 参数使用的第一个元素

我做错了什么,我该如何让它发挥作用?

【问题讨论】:

  • From ?spplot:" cuts: 切割数,或者,对于 SpatialPointsDataFrame 类的对象,实际使用的切割。“我认为您的错误与此有关。尝试将cuts 更改为单个值,即您需要的切割次数。这给了你什么?
  • 如果我在不同日期的两个 spplot() 方法中使用 cut=20,我确实得到了 20 个间隔,但它们没有覆盖相同的范围,例如1 月 -6 至 +8 日,间隔约为 0.3,7 月 4 日至 16 日,间隔约为 0.25
  • zlim 应该在spplot 中工作,类似于@koekenbakker 的答案

标签: r


【解决方案1】:

鉴于只能为 SpatialPointsDataFrame 指定精确的cuts,我认为您需要为spplot 使用替代方案。这是一个使用imageimage.plot 作为图例的示例(改编自https://stat.ethz.ch/pipermail/r-sig-geo/2007-June/002143.html)。通过设置数据的上限和下限(zlim),您可以创建两个相同的色带。只需将zinc.idwcopper.idw 替换为您自己的数据即可。

加载数据:

library(sp)
library(gstat)
library(fields)
data(meuse)
coordinates(meuse) = ~x+y
data(meuse.grid)
coordinates(meuse.grid) = ~x+y
gridded(meuse.grid) = TRUE

创建两个 IDW 网格:

zinc.idw = krige(zinc~1, meuse, meuse.grid)
copper.idw = krige(copper~1, meuse, meuse.grid)

设置情节:

par(mfrow=c(1,2),oma=c(2,2,2,2))
cols = bpy.colors(30)
zmin = 0
zmax = 1000

绘制地图和测量位置:

image(zinc.idw, zlim=c(zmin,zmax),col=cols)
box()
mtext(side=3,text='zinc')
points(meuse, pch = 3)

添加图例:

image.plot( zlim=c(zmin,zmax), nlevel=5,legend.only=TRUE, horizontal=F, col=cols)

其他铜网也一样;

image(copper.idw, zlim=c(zmin,zmax),col=cols)
box()
mtext(side=3,text='copper')
points(meuse, pch = 3)
image.plot( zlim=c(zmin,zmax), nlevel=5,legend.only=TRUE, horizontal=F, col=cols)

【讨论】:

  • 谢谢,它有效。不幸的是,这些地图失去了表现力,因为这两个地图只有整个色带的一个小子区间的值:/我想在没有 bpy 颜色值的情况下再试一次。你知道我怎样才能给它一个从深蓝色(低值)到浅黄色(高值)的 2 色渐变吗?
  • 这是一个不同的问题。见?colorRamp。示例:cols=colorRampPalette(c("darkblue","yellow"))(10); A = matrix(rep(1:10,2),ncol=2,nrow=10); image(A,col=cols)。够好了?然后将 cols 用于您的绘图。
猜你喜欢
  • 2022-01-14
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
相关资源
最近更新 更多