5

恐怕我又遇到了一个 spplot() 问题。

我希望我的 spplot() 中的颜色代表绝对值,而不是 spplot 默认情况下的自动值。

我通过从要绘制的变量中提取一个因子来实现这一点(使用命令 cut())。这很好用,但是颜色键看起来一点也不好看。

自己看:

library(sp)

data(meuse.grid)
gridded(meuse.grid) = ~x+y

meuse.grid$random <- rnorm(nrow(meuse.grid), 7, 2)
meuse.grid$random[meuse.grid$random < 0] <- 0
meuse.grid$random[meuse.grid$random > 10] <- 10
# making a factor out of meuse.grid$ random to have absolute values plotted
meuse.grid$random <- cut(meuse.grid$random, seq(0, 10, 0.1)) 

spplot(meuse.grid, c("random"), col.regions = rainbow(100, start = 4/6, end = 1))

我怎样才能让右边的 color.key 看起来不错 - 我希望有更少的刻度和更少的标签(也许 color.key 的每个极端只有一个标签)

先感谢您!

[编辑] 为了明确我对绝对值的含义:想象一张我想显示海高的地图。Seaheight = 0(这是最小值)应始终显示为蓝色。Seaheight = 10(仅出于示例的目的,它是最大值)应始终显示为红色。即使地图上显示的区域没有海,这也不应该改变。我在示例中使用 cut() 命令实现了这一点。所以这部分工作正常。

这就是我的问题 我不喜欢的是右侧的颜色描述。有 100 个刻度,每个刻度都有一个标签。我想要更少的刻度和更少的标签。

4

2 回答 2

6

要走的路是使用属性colorkey。例如:

## labels
labelat = c(1, 2, 3, 4, 5)
labeltext = c("one", "two", "three", "four", "five")

## plot
spplot(meuse.grid,
    c("random"),
    col.regions = rainbow(100, start = 4/6, end = 1),
    colorkey = list(
        labels=list(
            at = labelat,
            labels = labeltext
        )
    )
)
于 2011-04-12T14:33:45.787 回答
0

首先,根本不清楚您在这里想要什么。有很多方法可以让color.key外观看起来“漂亮”,那就是首先了解传递给 spplot 的数据以及对它的要求。cut() 提供完全格式化的间隔,如 (2.3, 5.34] 需要以不同的方式处理,增加绘图中的边距,标签的特定格式和间距等。这可能不是你的最终想要。

也许您只想要从输入值四舍五入的整数值?

library(sp)

data(meuse.grid)
gridded(meuse.grid) = ~x+y

meuse.grid$random <- rnorm(nrow(meuse.grid), 7, 2)

将值四舍五入(或 trunc()、ceil()、floor() 它们......)

meuse.grid$rclass <- round(meuse.grid$random)

spplot(meuse.grid, c("rclass"), col.regions = rainbow(100, start = 4/6, end = 1))
于 2011-03-01T23:40:19.987 回答