Как пометить значения растра на графике?

Как добавить к графику значения пикселей? Я могу получить значения, используя click(), но я хочу, чтобы он отображался на графике.

library(raster)
r <- raster(nrow=3, ncol=3)
r[] <- 1:ncell(r)
plot(r)
click(r) 

введите описание изображения здесь


person Eddie    schedule 09.01.2014    source источник


Ответы (3)


Попробуйте следующее, основанное на кусках, сколоченных из функции, возвращаемой getMethod("click", signature="Raster").

myClick <- function(x, n = Inf, id = FALSE, xy = FALSE, cell = FALSE, 
                    type = "n", show = TRUE, ...) {
    i <- 0
    n <- max(n, 1)
    while (i < n) {
        i <- i + 1
        loc <- locator(1, type, ...)
        xyCoords <- cbind(x = loc$x, y = loc$y)
        cells <- na.omit(cellFromXY(x, xyCoords))
        if (length(cells) == 0)
              break
        value <- extract(x, cells)
        text(xyCoords, labels = value)
    }
}

## Try it out
myClick(r, n=4)
person Josh O'Brien    schedule 09.01.2014
comment
Большое спасибо @Josh O'Brien. Работает отлично. Просто интересно, как уменьшить количество десятичных знаков, если бы я использовал настоящий набор данных. Например: r ‹- raster (nrow = 3, ncol = 3) r []‹ - runif (ncell (r)) r plot (r) # продолжить с myClick даст мне значения до 15 десятичных знаков. Также был бы признателен, если бы кто-нибудь мог помочь мне построить значение поверх пикселя без использования щелчка. - person Eddie; 10.01.2014
comment
Чтобы изменить количество цифр после десятичной дроби, вам нужно сделать что-то вроде round() значений, переданных команде text(). Так, например, попробуйте text(xyCoords, labels = round(value, 2)) напечатать значения с двумя цифрами после запятой. Что касается вашего второго вопроса, он слишком расплывчато сформулирован, чтобы здесь отвечать. Главный бит, который вам нужно указать, - это то, как вы собираетесь идентифицировать ячейки. После этого не составит большого труда найти координаты, в которых вы хотите печатать этикетки, и затем передать эти координаты в text(). Если вы застряли, вы всегда можете задать новый вопрос. - person Josh O'Brien; 10.01.2014

Если вы хотите показать все значения, вы можете использовать метод text:

library(raster)
r <- raster(nrow=3, ncol=3, vals=1:9)
plot(r)
text(r)

Для подмножества вы можете сделать что-то вроде:

z <- rasterToPoints(r, function(x) x > 6 )
plot(r)
text(z[,1], z[,2], z[,3])
person Robert Hijmans    schedule 01.02.2016

Я знаю, что этот вопрос уже отмечен как ответ, но, основываясь на решении Джоша и последующем вопросе Эдди, вот небольшой цикл for, который выполняет то, о чем просил Эдди (значения растра графика без десятичных чисел и без использования click):

r <- raster(nrow=3, ncol=3)
r[] <- runif(ncell(r))

plot(r)

for(i in 1:ncell(r)){
 xycoords <- xyFromCell(r, cell = i)
 value <- extract(r, xycoords)
 text(xycoords, labels = round(value))
}
person Achu Mani    schedule 01.02.2016