【问题标题】:Color ramp with the same colour scale across different plots in R在 R 中的不同绘图中具有相同色阶的色带
【发布时间】:2016-08-08 20:44:13
【问题描述】:

我需要创建一些光栅图形,但要保持色带比例相同,但我还希望色带是平滑渐变。是否可以保留大量颜色(〜100 以具有平滑的色带),但同时具有合理数量的中断,以便可读?

library(raster)
library(colorRamps)

r1<- raster(ncol=56, nrow=26)
r1[] <- runif(n=56*26,min=-20,max=15)

r2<- raster(ncol=56, nrow=26)
r2[] <- runif(n=56*26,min=-14,max=68)


brk=seq(-50,70,length.out=100)
col=matlab.like(100)

plot(r1, breaks=brk, col=col)
plot(r2, breaks=brk, col=col)

在这种情况下,我希望有一个颜色渐变,但您无法阅读中断标签

当我减少中断次数时,颜色渐变变为一种颜色

brk=seq(-50,70,length.out=6)

【问题讨论】:

    标签: r colors maps raster color-scheme


    【解决方案1】:

    您可能会发现使用ggplot2 会更轻松。在下面的代码中,关键是对于每个绘图,为lowmidhigh 设置相同的颜色值,在scale_fill_gradient2 中设置相同的limits。这保证了相同的数据值在每个图中映射到相同的颜色。例如:

    library(rasterVis)
    library(ggplot2)
    
    # Reproducible rasters
    set.seed(4598)
    r1<- raster(ncol=56, nrow=26)
    r1[] <- runif(n=56*26,min=-20,max=15)
    
    r2<- raster(ncol=56, nrow=26)
    r2[] <- runif(n=56*26,min=-14,max=68)
    
    # Get range of data values across the two rasters
    rng = range(c(getValues(r1), getValues(r2)))
    
    gplot(r1) + 
      geom_tile(aes(fill=value)) +
      ggtitle("r1") +
      scale_fill_gradient2(low="red", mid="green", high="blue", 
                           midpoint=mean(rng),    # Value that gets the middle color (default is zero)
                           breaks=seq(-100,100,10),  # Set whatever breaks you want
                           limits=c(floor(rng[1]), ceiling(rng[2])))  # Set the same limits for each plot
    
    gplot(r2) + 
      geom_tile(aes(fill=value)) +
      ggtitle("r2") +
      scale_fill_gradient2(low="red", mid="green", high="blue", 
                           midpoint=mean(rng),    # Value that gets the middle color (default is zero)
                           breaks=seq(-100,100,10),  # Set whatever breaks you want
                           limits=c(floor(rng[1]), ceiling(rng[2])))  # Set the same limits for each plot
    

    【讨论】:

      【解决方案2】:

      您可以使用at 来定义您的范围(最小值、最大值、间隔)。较小的间隔将产生更平滑的颜色范围。在此处查看相关问题-How to setup step color region in r? 或此帖子Locking color key in levelplot in r

      【讨论】:

        猜你喜欢
        • 2011-11-08
        • 1970-01-01
        • 2011-05-18
        • 1970-01-01
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        • 1970-01-01
        相关资源
        最近更新 更多