2011-02-27 54 views
3

我想为spplot()上的区域添加名称标签。spplot上的country-labels()

例子:

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")) 

第二个可能不会因为晶格的工作!? 但是,我需要spplot功能。 我如何获得情节的标签?

+1

不能混合基和网格图形。 'text()'使用前者,而格子使用后者。你可以用grid或者'panel.text()'来使用等效的'ltext()',但是我怀疑你需要编写一个面板函数来使用它;我不认为你可以在基本图形上轻松绘制格子图的顶部。 – 2011-02-27 23:57:01

回答

5

谢谢你,加文辛普森!

我终于找到了一种方法。

在此希望它可以帮助别人的未来,我发表我的解决方案:

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)) 
5

添加了一些文本的标准方式是使用功能晶格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") 

可生产这些数字(前和缩放后)

Horror 1Horror 2

您可以在各个面板中使用自定义面板功能,采用坐标:

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]) 

(自己运行看看它的样子)

你也可以在spplot函数中使用这种技巧,尽管你必须检查你使用的任何绘图功能。在spplot的帮助文件中,您可以找到可能的选项(polygonsplot,gridplot和pointsplot),因此您必须检查它们中的任何一个是否正在做你想做的。以上与gridplot继续,这变为:

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") 

其给出rescalable结果,其中该文本在每个面板中加入:

enter image description hereHooray