В интересах снятия шкуры этого кота, и, войдя в waaay слишком много деталей, этот код разлагает R изображение в сетку квадрациклов (как используется rgl
), а затем показывает разницу между растровой графикой и строкой «черепица» или «прямой».
library(raster)
im <- raster::raster(volcano)
## this is the image in rgl corner-vertex form
msh <- quadmesh::quadmesh(im)
## manual labour for colour scaling
dif <- diff(range(values(im)))
mn <- min(values(im))
scl <- function(x) (x - mn)/dif
Это традиционное изображение R ', которое рисует небольшую черепицу или «rect()» для каждого пикселя.
list_image <- list(x = xFromCol(im), y = rev(yFromRow(im)), z = t(as.matrix(im)[nrow(im):1, ]))
image(list_image)
Это медленно, и, хотя он называет источник «прямоугольник()» под капотом, мы не можем также установить цвет границы. Используйте «useRaster = TRUE» для использования «rasterImage» для более эффективного времени рисования, управления интерполяцией и, в конечном счете, размера файла.
Теперь давайте построим изображение снова, но явно вызываем прямоугольник для каждого пикселя. («quadmesh», вероятно, не самый простой способ продемонстрировать, это просто свежо в моем сознании).
## worker function to plot rect from vertex index
rectfun <- function(x, vb, ...) rect(vb[1, x[1]], vb[2,x[1]], vb[1,x[3]], vb[2,x[3]], ...)
## draw just the borders on the original, traditional image
apply(msh$ib, 2, rectfun, msh$vb, border = "white")
Теперь попробуйте еще раз с «rect».
## redraw the entire image, with rect calls
##(not efficient, but essentially the same as what image does with useRaster = FALSE)
cols <- heat.colors(12)
## just to clear the plot, and maintain the plot space
image(im, col = "black")
for (i in seq(ncol(msh$ib))) {
rectfun(msh$ib[,i], msh$vb, col = cols[scl(im[i]) * (length(cols)-1) + 1], border = "dodgerblue")
}
Спасибо, что исправляет проблему блестяще! – Winawer
Чтобы избежать возмущений, вызванных этой формой плитки, вы можете сделать это в двух отдельных слоях: 'geom_tile (aes (color = z), fill = NA) + geom_tile (aes (fill = z), color = NA) '. – otsaw