2

WMS (Geoserver) で作成したマップ (ベクター グラフィック) に半透明の ggplot マップを重ねようとしています。

grImport パッケージ (コマンド PostScriptTrace、readPicture、pictureGrob) を使用して R に pdf をインポートできます。しかし今、私は迷っています。PDFの背景画像にggplot画像を重ねたいと思います。grob を背景画像として使用するように ggplot を指定できますか?

「annotation_custom()」の方向性を教えてくれたbaptisteに感謝します。彼の助けを借りて、私は私の質問のためのより最小限の例を作成することができました:

library("cluster")
library("lattice")
library("ggplot2")
library("grImport")

sink("test.ps")
cat("%!PS\n")
cat("/petal {\n")
cat("newpath\n")
cat("0 0 moveto\n")
cat("-5 10 lineto\n")
cat("-10 20 10 20 5 10 curveto\n")
cat("5 10 lineto\n")
cat("closepath\n")
cat("0 setgray\n")
cat("fill\n")
cat("} def\n")
cat("20 20 translate\n")
cat("5 {\n")
cat("petal 72 rotate\n")
cat("} repeat\n")
cat("showpage")
sink()
PostScriptTrace("test.ps")
test.ps.xml <- readPicture("test.ps.xml")
test.grob <- pictureGrob(test.ps.xml)

# following the example from 'Importing Vector Graphics: The grImport Package for R' by Paul Murrell I can test the graphic and add the .ps to a lattice plot
xyplot(V8 ~ V7, data = flower,
  xlab = "Height", ylab = "Distance Apart",
  panel = function(x, y, ...) {
    grid.symbols(test.ps.xml, x, y, units = "native", size = unit(5, "mm"))
  }
)

# ... but I would like to add the .ps as a background image to a plot with ggplot2
polygon.df <- data.frame(
  id = 1,
  x = c(-60,60,60,-60,-60),
  y = c(0,0,175,175,0)
)
ggplot() + annotation_custom(test.grob)+
  geom_polygon(data=polygon.df, aes(x=x, y=y), alpha=.2, fill="blue") +
  scale_x_continuous(limits=c(-70, 70), expand = c(0,0)) + 
  scale_y_continuous(limits=c(-10, 185), expand = c(0,0))

ただし、ps-graphic は ggplot にプロットされません。私はかなり些細なことを見逃していると確信しています。

編集:次のDOESはグロブを示しています:

qplot(x=polygon.df$x, y=polygon.df$y)+ 
annotation_custom(test.grob)

次の例ではグロブは表示されません。

ggplot() + geom_point(data=polygon.df, aes(x=x, y=y)) +
annotation_custom(test.grob)

qplot() ではグロブが表示されるのに、ggplot() では表示されない理由がよくわかりません。

4

1 に答える 1

0

annotation_custom は非常にバグが多く、pictureGrob を処理できない可能性があります。gtable にグロブを追加するには、次のトリックを試すことができます。

library(ggplot2)
library(gtable)

p <- qplot(1,1) + theme(panel.background=element_rect(fill=NA))
g <- ggplotGrob(p)

pos <- gtable_filter(g, "panel", trim=FALSE)$layout
g <- with(pos, gtable_add_grob(g, test.grob, t, l, b, r, z-1))

grid.newpage()
grid.draw(g)

ここに画像の説明を入力

于 2013-11-08T16:11:17.743 に答える