10

geom_tileを使用してプロットを作成し、それを.pdfに出力しています(pdf( "filename"、...)を使用)。ただし、私がそうすると、.pdfの結果には小さな線(1人の人が言うように縞模様)が走っています。問題を示す画像を添付しました。 最小限の例

グーグルはこのスレッドに許可しましたが、そこでの唯一の本当のアドバイスは、size = 0をgeom_tileに渡してみることでしたが、これは効果がありませんでした。これらを修正する方法について何か提案はありますか?これを紙の図として使いたいのですが、こんな風にはいきません。

最小限のコード:

require(ggplot2)
require(scales)
require(reshape)

volcano3d <- melt(volcano) 
names(volcano3d) <- c("x", "y", "z") 
 v <- ggplot(volcano3d, aes(x, y, z = z)) 

pdf("mew.pdf")
print(v + geom_tile(aes(fill=z)) + stat_contour(size=2) + scale_fill_gradient("z"))
4

4 に答える 4

18

colourこれは、のタイルのデフォルトgeom_tileが白のように見えるために発生します。

colourこれを修正するには、と同じ方法でをzにマップする必要がありますfill

print(v + 
  geom_tile(aes(fill=z, colour=z), size=1) + 
  stat_contour(size=2) + 
  scale_fill_gradient("z")
)

ここに画像の説明を入力してください

于 2012-04-23T08:01:23.377 に答える
7

使用してみてくださいgeom_raster

pdf("mew.pdf")
print(v + geom_raster(aes(fill=z)) + stat_contour(size=2) + scale_fill_gradient("z"))
dev.off()

私の環境では良い品質です。

ここに画像の説明を入力してください

于 2012-04-23T08:00:58.273 に答える
0

コンピューター(Windows 7)で問題を再現できませんが、特定の構成のリストで説明されている問題であったことを覚えています。ブライアン・リプリー(私が覚えているなら)がお勧めします

CairoPDF("mew.pdf") # Package Cairo

これを回避するには

于 2012-04-23T09:13:43.187 に答える
0

この猫の皮を剥ぎ、詳細を説明しすぎるために、このコードは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")
}
于 2016-09-01T14:17:39.760 に答える