この猫の皮を剥ぎ、詳細を説明しすぎるために、このコードはR画像を(で使用されるrgl
)四角形のメッシュに分解し、ラスタープロットと「タイル」または「rect」の違いを示します。 "プロット。
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)
低速で、内部で「rect()」のソースを呼び出しますが、境界線の色を設定することもできません。'useRaster = TRUE'を使用して、'rasterImage'を使用すると、描画時間を効率化し、補間を制御し、最終的にはファイルサイズを制御できます。
次に、画像をもう一度プロットしましょう。ただし、すべてのピクセルに対して明示的にrectを呼び出します。(「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")
}