spe*_*ndo 4 graphics maps r lattice
我想为spplot()上的区域添加名称标签.
例:
load(url('http://gadm.org/data/rda/FRA_adm0.RData'))
FR <- gadm
FR <- spChFIDs(FR, paste("FR", rownames(FR), sep = "_"))
load(url('http://gadm.org/data/rda/CHE_adm0.RData'))
SW <- gadm
SW <- spChFIDs(SW, paste("SW", rownames(SW), sep = "_"))
load(url('http://gadm.org/data/rda/DEU_adm0.RData'))
GE <- gadm
GE <- spChFIDs(GE, paste("GE", rownames(GE), sep = "_"))
df <- rbind(FR, SW, GE)
## working
plot(df)
text(getSpPPolygonsLabptSlots(df), labels = c("FR", "SW", "GE"))
## not working
spplot(df[1-2,])
text((getSpPPolygonsLabptSlots(df), labels = c("FR", "SW"))
Run Code Online (Sandbox Code Playgroud)
第二个可能因为格子而无法工作!?但是,我需要spplot功能.我如何获得情节上的标签?
添加一些文本的标准方法是使用ltext格子函数 ,但是给出的坐标总是绝对的.从本质上讲,添加文本后无法真正重新缩放图形.例如:
data(meuse.grid)
gridded(meuse.grid)=~x+y
meuse.grid$g = factor(sample(letters[1:5], 3103, replace=TRUE),levels=letters[1:10])
meuse.grid$f = factor(sample(letters[6:10], 3103, replace=TRUE),levels=letters[1:10])
spplot(meuse.grid, c("f","g"))
ltext(100,200,"Horror")
Run Code Online (Sandbox Code Playgroud)
生成这些数字(缩放前后)

您可以使用自定义面板功能,使用每个面板中的坐标:
myPanel <- function(x,y,xx,yy,labels,...){
panel.xyplot(x,y,...)
ltext(xx,yy,labels)
}
xyplot(1:10 ~ 1:10,data=quakes,panel=myPanel,
xx=(1:5),yy=(1:5)+0.5,labels=letters[1:5])
Run Code Online (Sandbox Code Playgroud)
(自己运行以查看它的外观)
你可以在spplot函数中使用这个技巧,虽然你真的必须检查你使用的任何绘图功能.在spplot上的帮助文件中,您可以找到可能的选项(polygonsplot,gridplot和pointsplot),因此您必须检查它们中的任何一个是否正在执行您想要的操作.继续上面的网格图,这变为:
myPanel <- function(x,y,z,subscripts,xx,yy,labels,...){
panel.gridplot(x,y,z,subscripts,...)
ltext(xx,yy,labels)
}
# I just chose some coordinates
spplot(meuse.grid, c("f","g"),panel=myPanel,xx=180000,yy=331000,label="Hooray")
Run Code Online (Sandbox Code Playgroud)
它给出了可重新调整的结果,在每个面板中添加了文本:

谢谢Gavin Simpson!
我终于找到了办法.
希望它在将来帮助其他人,我发布我的解决方案:
sp.label <- function(x, label) {
list("sp.text", coordinates(x), label)
}
ISO.sp.label <- function(x) {
sp.label(x, row.names(x["ISO"]))
}
make.ISO.sp.label <- function(x) {
do.call("list", ISO.sp.label(x))
}
spplot(df['ISO'], sp.layout = make.ISO.sp.label(df))
Run Code Online (Sandbox Code Playgroud)