3

PDF にページ番号を追加するのに問題があります。ページ/プロットを挿入する方法は次のとおりです。

pdf( file = pdfFilePath , width = 11 , height = 8.5  )
for ( ... ) {
    grid.newpage()
    pushViewport( viewport( layout = grid.layout( 2 , 2 ) ) )
    ... print 4 plots ....
}

onefile はページ番号でファイルに名前を付けているようですが、同じファイルにページ番号を表示したいです。

編集
@Gavin のコード サンプルを変更して、グラフィック タイプを混合してページ番号を取得する作業バージョンを作成しました。

require(ggplot2)
pdf( file = "FILE_PATH_TO_SAVE_PDF_HERE" , width = 11 , height = 8.5  )
par( oma = c ( 4 , 4 , 4 , 4 ) , mar=c( 4 , 0 , 2 , 0 )  )
plot( 0:11 , type = "n", xaxt="n", yaxt="n", bty="n", xlab = "", ylab = ""  )
mtext( side = 3 , line = 0 , outer = TRUE  , cex = 1.5 , family="mono" , "Title" )
grid.newpage()
p1 <- ggplot(data.frame(X = 1:10, Y = runif(10)), aes(x = X, y = Y)) + 
        geom_point()
vplayout <- function(x, y) {
    viewport(layout.pos.row = x, layout.pos.col = y)
}
pushViewport(viewport(layout = grid.layout(2, 2)))
print(p1, vp = vplayout(1,1))
print(p1, vp = vplayout(1,2))
print(p1, vp = vplayout(2,1))
print(p1, vp = vplayout(2,2))
mtext( "1" , side = 1 , line = 3 , outer = TRUE , cex = .8 , family="mono"  )
dev.off()
4

4 に答える 4

2

Q に関する 2 番目のコメントから、mtext(). これは OP で機能しているように見えるので、ここに拡張バージョンを示します。

ベースグラフィック:

op <- par(oma = c(2,0,0,0))
layout(matrix(1:4, ncol = 2))
plot(1:10)
plot(1:10)
plot(1:10)
plot(1:10)
mtext(side = 1, text = "Page 1", outer = TRUE)
layout(1)
par(op)

その結果:

基本グラフィック ページ番号の例

@SFun28 は、このアイデアが彼の ggplot/grid グラフィックスでも機能すると報告していますが、私には機能しません。以下のコード チャンクの最後の行を実行すると、次のエラーが発生します。

> mtext(side = 1, text = "Page 1")
Error in mtext(side = 1, text = "Page 1") : 
  plot.new has not been called yet

これは、ベース グラフィックとグリッド グラフィックを混在させないようにという警告を示しています。

require(ggplot2)
p1 <- ggplot(data.frame(X = 1:10, Y = runif(10)), aes(x = X, y = Y)) + 
        geom_point()
vplayout <- function(x, y) {
    viewport(layout.pos.row = x, layout.pos.col = y)
}
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 2)))
print(p1, vp = vplayout(1,1))
print(p1, vp = vplayout(1,2))
print(p1, vp = vplayout(2,1))
print(p1, vp = vplayout(2,2))
mtext(side = 1, text = "Page 1")
于 2011-04-20T21:24:54.567 に答える
2

グリッドを使用してプロット全体を描画し、別のビューポートの下部にラベルを配置する、Paul Murrell のR Graphics bookのを変更しました。個々のプロットが何をしているのかわからないので、微調整はOPに任せますが、ラベルが描画されるデバイスの下部に追加のビューポート(?)を作成するという一般的なアイデアは、アイデアにマッピングする必要がありますすでに @SFun28 によって使用されています: grid.layout()

label <- textGrob("A page number! ",
                  x=0.5, y = 1.0, just="centre")
x <- seq(0.1, 0.9, length=50)
y <- runif(50, 0.1, 0.9)
gplot <- 
  gTree(
    children=gList(rectGrob(gp=gpar(col="grey60",
                                    fill="white")),
                   linesGrob(x, y), 
                   pointsGrob(x, y, pch=16, 
                              size=unit(1.5, "mm"))),
    vp=viewport(width=unit(1, "npc") - unit(5, "mm"), 
                height=unit(1, "npc") - unit(10, "mm")))



layout <- grid.layout(2, 1,
                      widths=unit(c(1, 1), 
                                  c("null", "grobwidth"),
                                  list(NULL, label)),
                      heights = unit(c(1, 1),
                                     c("null", "grobheight"),
                                     list(NULL, label)))

grid.rect(gp=gpar(col="grey60", fill="grey90"))
pushViewport(viewport(layout=layout))
pushViewport(viewport(layout.pos.row=2))
grid.draw(label)
popViewport()
pushViewport(viewport(layout.pos.col=1))
grid.draw(gplot)
popViewport(2)

これにより、次のことが得られます。

グリッドページ番号の例

于 2011-04-20T20:36:38.230 に答える
1
library(ggplot2)
plots = replicate(8, qplot(1,1))
library(gridExtra)
p <- 
do.call(marrangeGrob, c(plots, list(ncol=2, nrow=2, top =NULL, 
        bottom = quote(quote(paste(g, "/",pages))))))

p

ggsave("multipage.pdf", p)

quote(quote())どういうわけか、遅延評価を維持するために必要です)

于 2012-01-19T19:51:05.407 に答える