【问题标题】:How to represent highest and lowest values with > <?如何用 > < 表示最高和最低值?
【发布时间】:2015-11-25 20:27:09
【问题描述】:

我有一个栅格,当我绘制它时,我得到了一个矩形的图例。我被要求将图例绘制为该图中的图例(底部和顶部两个箭头)。

三角形中的颜色表示大于 15 和小于 -10 的所有值。如果三角形很难放在图例上。是否可以只放在 符号 >

    on the top > 15   and on the bottom < -10
library(raster)
r <- raster(nrows=10, ncols=10); r <- setValues(r, 1:ncell(r))
plot(r)

【问题讨论】:

    标签: r raster


    【解决方案1】:

    如您所说,传达相同信息的一种方法是指示底部和顶部颜色代表“小于 -10”和“大于 15”。这相当于说斜坡的两端分别是负无穷和正无穷。

    您可以通过以下方式使用 rasterVis::levelplot

    # First, some fake data
    r <- raster(matrix(runif(100, -20, 30), 10))
    
    library(rasterVis)
    levelplot(r, margin=FALSE, at=c(-Inf, seq(-10, 15, 2.5), Inf), 
              colorkey=list(at=seq(-12.5, 17.5, 2.5),
                            labels=c(expression(-infinity), 
                                     seq(-10, 15, 2.5), 
                                     expression(infinity)))
    )
    

    上面,levelplotat 参数控制绘图中颜色发生变化的间隔。我们将其设置为,-Inf 和 -10 之间的值是一种颜色,然后颜色每 2.5 个单位变化一次,直到 15,之后颜色保持不变,直到 Infcolorkey 列表的 at 元素控制颜色图例的颜色中断。负无穷和正无穷将由 -12.5 和 17.5 表示。 colorkeylabels 元素确定将在这些位置绘制的标签。我们可以使用expression 来包含无穷大符号。

    如果您想使用发散坡道,您可以根据坡道的负侧与正侧的长度手动计算合适的坡道。例如,在上面的示例中,我们需要 7 种正色和 5 种负色,因此我们可以创建 14 种颜色的渐变,并排除前 2 种颜色:

    library(RColorBrewer)
    colr <- colorRampPalette(rev(brewer.pal(11, 'RdBu')))(14)[3:14]
    

    然后通过这个坡道到col.regions:

    levelplot(r, margin=FALSE, at=c(-Inf, seq(-10, 15, 2.5), Inf), 
          colorkey=list(at=seq(-12.5, 17.5, 2.5),
                        labels=c(expression(-infinity), 
                                 seq(-10, 15, 2.5), 
                                 expression(infinity))),
          col.regions=colr
    )
    

    【讨论】:

    • 我没怎么用过rasterVis。但看起来语法很简单;您清楚地解释了如何完成这项工作。 +1
    • @jazzurro - 谢谢,我经常使用栅格数据,rasterVis 一直是救命稻草。它使用lattice,因此或多或少遵循lattice 语法(例如?lattice::levelplot)。
    • 我明白了。我有点跳过格子时代并开始使用 ggplot。由于我对空间数据进行了一些数据分析和可视化,我认为值得挖掘 rasterVis。感谢这篇文章!
    • @temor - 可以将字符向量传递给labels,但是如果将底端标记为&lt; -10,您如何解释-10&lt; -10 之间的区域?
    • 如果您真的必须这样做,那么您可以执行colorkey=list(at=seq(-12.5, 17.5, 2.5), labels=c('', '&lt; -10', seq(-7.5, 12.5, 2.5), '&gt; 15', '')) 之类的操作。将断点标记为小于(或大于)某个值 是没有意义的。将底部 bin 标记为 &lt; -10 会更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2016-05-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多