2

我使用 spplot()(package sp) 绘制了一张基本地图

比例尺图例在 0 和 1 之间的小数位,但我实际上希望它显示百分比。

如果我将 Plot() 函数用于简单图形,我可以通过手动添加它们来更改比例。在 spplot 中是否有等效的方法可以手动定义单位类型?

例子:

library(sp)
library(lattice)
trellis.par.set(sp.theme()) # sets bpy.colors() ramp
data(meuse)
coordinates(meuse) <- ~x+y
spplot(meuse, "ffreq")

该图显示 1,2,3 作为图例。如果假设我想将其显示为 1 美元、2 美元、3 美元怎么办?

4

3 回答 3

3

legendEntries参数(在此处展示)允许您将文本标签的字符向量提供给spplot()图例。像这样使用它:

spplot(meuse, "ffreq", legendEntries = paste0("$", levels(meuse$ffreq)))

在此处输入图像描述

于 2015-01-14T05:13:08.883 回答
1

如果您绘制一个因子,只需更改因子的标签可能会更容易:

levels(meuse$ffreq) = c("a", "b", "c")
spplot(meuse, "ffreq")

legendEntries已记录,但不是 的命名参数spplot,因此在参数列表中缺少。对象的spplot方法SpatialPointsDataFrame有一个colorkey参数来绘制连续的颜色键;即将推出的 sp 1.0-18 将允许一个列表参数让它控制相同的参数lattice::levelplot

于 2015-01-18T22:19:36.143 回答
0

sp::spplot 的帮助页面说这是使用 lattice 函数完成的,并进一步指出可以scale以与 xyplot 中相同的方式将参数传递给参数。但是,这不太可能影响图例,而是会更改 x 和 y 轴的注释。当我在帮助页面中运行第一个示例时,我得到一个从 0 到 500 的 scale.bar,只有这两个值作为标签。查看使用的代码可以推断出“scale.bar”是用传递给的参数构造的sp.layout,在这种情况下list(l2,l3,l4,l5)。经过几次死胡同尝试后,我提出了有关如何使用 latticesimpleKey函数来提供您的图例修改并制作比例尺的建议,如第一个示例所示:

library(sp); library(lattice)
l2 = list("SpatialPolygonsRescale", layout.north.arrow(), offset = c(181300,329800), 
    scale = 400)
l3 = list("SpatialPolygonsRescale", layout.scale.bar(), offset = c(180500,329800), 
    scale = 500, fill=c("transparent","black"))
l4 = list("sp.text", c(180500,329900), "0")
l5 = list("sp.text", c(181000,329900), "500 m")

spplot(meuse, c("ffreq"), sp.layout=list(l2,l3,l4,l5) 
              ,key=simpleKey( text=paste0("$", 1:3) ) )

注意:由于spplot是 S4 函数,因此您可以通过以下方式获取代码:

showMethods(spplot, class="SpatialPointsDataFrame", includeDefs=TRUE)
于 2015-01-14T02:11:40.913 回答