ярлыки стран на spplot () - PullRequest
       16

ярлыки стран на spplot ()

4 голосов
/ 28 февраля 2011

Я бы хотел добавить метки имен для регионов в 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.Как бы я получил ярлыки на сюжете?

Ответы [ 2 ]

6 голосов
/ 28 февраля 2011

Стандартный способ добавления текста - использовать функцию 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 1 Horror 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 вы найдете возможные варианты (полигонсплот, гридплот и точечный график), поэтому вам нужно проверить, выполняет ли какой-либо из них то, что вам нужно.Продолжая приведенную выше сетку, она становится такой:

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

, которая дает пересчитываемый результат, где текст добавляется на каждой панели:

enter image description here Hooray

5 голосов
/ 28 февраля 2011

Спасибо, Гэвин Симпсон!

Я наконец нашел способ.

В надежде, что это поможет другим в будущем, я выкладываю свое решение:

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