を回避するために
CairoPDF("mew.pdf") # Package Cairo
をお勧めします、このコードは、クワッドのメッシュに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()'のソースを呼び出しますが、境界線の色も設定できません。 'rasterImage'を使用すると、効率的な描画時間、補間制御、最終的にはファイルサイズを使用するには 'useRaster = TRUE'を使用します。
ここで、イメージを再度プロットしてみましょう。明示的にすべてのピクセルに対してrectを呼び出します。 (「クワッドメッシュ」はおそらく最も簡単な方法ではなく、私の心の中で新鮮なものです)。
## 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