【问题标题】:R - Contour Map with multiple layers (lattice)R - 具有多个图层的轮廓图(晶格)
【发布时间】:2012-02-09 02:01:21
【问题描述】:

这是我的代码和相关的变量结构。

Correlation_Plot = contourplot(cor_Warra_SF_SST_JJA, region=TRUE, at=seq(-0.8, 0.8, 0.2), 
labels=FALSE, row.values=(lon_sst), column.values=lat_sst,
xlab='longitude', ylab='latitude')

Correlation_Plot = Correlation_Plot + layer({ ok <- (cor_Warra_SF_SST_JJA>0.6);
            panel.text(cor_Warra_SF_SST_JJA[ok]) })
Correlation_Plot

     # this is the longitude (from -179.5 to 179.5) , 360 data in total
    > str(lon_sst) 
     num [1:360(1d)] -180 -178 -178 -176 -176 ...

     # this is the latitude (from -89.5 to 89.5), 180 data in total 
    > str(lat_sst) 
     num [1:180(1d)] -89.5 -88.5 -87.5 -86.5 -85.5 -84.5 -83.5 -82.5 -81.5 -80.5 ...

     # This is data set corresponding to longitude and latitude  
     > dim(cor_Warra_SF_SST_JJA) 
       [1] 360 180

我尝试使用layer() 仅针对大于 0.6 的轮廓显示标签,但它不起作用。

  1. 是否可以增加图例中的颜色对比度,以便真正清楚什么颜色对应什么级别。什么是颜色选项,我找不到?

  2. 最重要的是我想为指定的轮廓间隔(例如 +/- 0.2)画一条更粗的黑线?我认为我也可以使用 layer() 来做到这一点,但我不确定我应该使用什么 panel 函数。

  3. 另外,我尝试用纯色填充大陆,但我找不到任何东西。 我尝试过使用 map,但它不适用于 lattice。

感谢您的帮助。

【问题讨论】:

    标签: r map panel lattice contour


    【解决方案1】:

    查看?panel.levelplot 以获取contourplot 的其他参数。

    1. 您可以使用 col.regions 参数,该参数将采用您希望与间隔对应的颜色向量,或颜色渐变函数(例如下面)。

      李>
    2. 使用自定义面板函数,类似这样(使用使用Santiago Beguería's blog 上给出的方法生成的空间自相关虚拟数据集)。使用lpolygon 绘制地图对象:

      生成虚拟数据集:

      library(gstat)
      
      # create structure
      xy <- expand.grid(1:360, 1:180)
      names(xy) <- c('x','y')
      
      # define the gstat object (spatial model)
      g.dummy <- gstat(formula=z~1, locations=~x+y, dummy=T, beta=1,    
        model=vgm(psill=0.025,model='Exp',range=5), nmax=20)
      
      # make a simulations based on the gstat object
      yy <- predict(g.dummy, newdata=xy, nsim=1)
      gridded(yy) = ~x+y
      
      # scale to range [-1, 1]
      z <- matrix(yy@data[, 1], ncol=180)
      z.scalefac <- (max(z) - min(z)) / 2
      z <- -1 + (z - min(z)) / z.scalefac
      
    3. 剧情:

      library(lattice)
      library(maps)
      
      lon_sst <- seq(-179.5, 179.5, 1)
      lat_sst <- seq(-89.5, 89.5, 1)
      
      colramp <- colorRampPalette(c('red', 'yellow', 'white', 'green', 'blue'))
      
      contourplot(z, xlim=c(100, 160), ylim=c(-80, -50), 
        at=seq(-1, 1, 0.2), region=TRUE, col.regions=colramp,
        row.values=lon_sst, column.values=lat_sst, labels=FALSE, 
        xlab='longitude', ylab='latitude',
        panel = function(at, region, ...) {
          panel.contourplot(at=at, region=TRUE,  ...)
          panel.contourplot(at=c(-0.2, 0.2), lwd=2, region=FALSE, ...)
          mp <- map("world", "antarctica", plot = FALSE, fill=TRUE)
          lpolygon(mp$x, mp$y, fill=TRUE, col='gray')
      })
      

    【讨论】:

    • 在我的电脑中,'col.regions=colramp' 不起作用,但我用 'color.palette=colorRampPalette(c("blue","green","white","黄色”,“红色”))'。这真的很有帮助,但我怎样才能填满整个大陆?
    • 是的,抱歉,我忘记在我的坡道中粘贴了...已编辑答案。
    • @YuDeng:这个答案有很多好的方面!请返回,并勾选 jbaums 对您之前问题的回答。我们应该鼓励这种努力。我不需要点,因为我需要看到出色的工作示例。
    【解决方案2】:

    Q1:您需要使用 llinespanel.lines 与上一个问题中用于大陆轮廓的相同数据来做到这一点

    第二季度:

    ?panel.contour
    

    .... 其中说“lwd”是一个可用的选项,我怀疑你会使向量的第七个元素 = 2。

    Q3:可能是一个填充论点,但必须注意的是,您不包含指向数据和您的数据准备的链接,严重阻碍了我们测试解决方案的努力。

    【讨论】:

    • 对不起,我刚开始使用 R 2 周,必须从头开始。对我来说,帮助页面真的很混乱。是否所有参数都适用于多个功能,有时我不知道在参数后面放什么。
    • R 函数中的参数根本没有标准化。另外,您有三种不同的绘图范例:基本图形、格子(轮廓图是其中的一部分)和 ggplot... 完美的混淆配方。
    • 同意,当我们没有数据时,这有点棘手。我已经编辑了我的解决方案,以包含我使用的虚拟数据集的生成。
    • 一开始,我以为你们只要把变量设置为随机数,只要代码有效,就可以了。那么下一次,当我问问题时我应该包括什么?
    • @YuDeng 好吧,在很多情况下可能没问题,但等高线图并没有真正意义,除非数据在空间上是自相关的。使用dput() 通常是个好主意,这样我们就可以重现您的数据(因为您的矩阵非常庞大,您可以只提供一个子集)。如果您不愿意提供您的实际数据(许可等),请提供一些虚假数据(或添加噪音,如果这对您来说足够好的话)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2012-08-21
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多