Как пометить значения растра на графике?
Вопрос
Как я мог бы добавить значения пикселей к графику?Я могу получить значения, используя click()
но я хочу, чтобы это появилось в сюжете.
library(raster)
r <- raster(nrow=3, ncol=3)
r[] <- 1:ncell(r)
plot(r)
click(r)
Решение
Попробуйте следующее, что основано на кусочках вместе от функции, возвращаемой
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)
. Другие советы
Если вы хотите показать все значения, вы можете использовать метод 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])
. Я знаю, что этот вопрос уже помечен как ответ, но, основываясь на решении Джоша и последующем вопросе Эдди, вот небольшой цикл 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))
}
Не связан с StackOverflow