【问题标题】:country-labels on spplot()spplot() 上的国家/地区标签
【发布时间】:2011-02-27 22:24:45
【问题描述】:

我想为 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"))

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

【问题讨论】:

  • 您不能混合使用基本图形和网格图形。 text() 使用前者,而 lattice 使用后者。您可以使用等效的 ltext() 和 lattice 或 panel.text(),但我怀疑您需要编写一个面板函数才能使用它;我认为您不能像使用基本图形那样轻松地在格子图上绘制。

标签: r graphics maps lattice


【解决方案1】:

添加一些文本的标准方法是使用 lattice 的函数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")

生成这些图形(缩放前后)

您可以使用自定义面板功能,使用每个面板内的坐标:

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),因此您必须检查它们中的任何一个是否正在执行您想要的操作。继续上面的网格图,这变成了:

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

它给出了一个可重新缩放的结果,其中文本被添加到每个面板中:

【讨论】:

    【解决方案2】:

    谢谢你,加文·辛普森!

    我终于找到了办法。

    希望它在未来对其他人有所帮助,我发布了我的解决方案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2023-03-22
      • 2020-05-25
      • 1970-01-01
      相关资源
      最近更新 更多