我在R会话中保存的图形和图形通常用于我的文档,我想用工作目录,文件名和日期来注释它们。因为我需要硬拷贝我的文档(不要问),这将使我的生活更轻松。我以为我可以在打印之前修改pdf,但我实际上更喜欢直接在R中标记数字。
由于大部分时间我使用dev.copy2pdf()
生成图形,因此我编写了以下小函数:
# annotate PDF copy of the graph produced
copyan <- function( file= "tmp.pdf", cex= 0.75 ) {
oldpar <- par( mar= c( 0, 0, 0, 0 ), usr= c( 0, 1, 0, 1 ) )
on.exit( par( oldpar ) )
par( new= TRUE )
plot.new()
# ann is the annotation stamp:
# current working directory,
# file name, date and time.
ann <- paste( getwd(), file, Sys.time(), sep= ", " )
strh <- strheight( ann, cex= cex )
strw <- strwidth( ann, cex= cex )
# put text in the lower bottom corner,
# just at the very margin of the plot
usr1 <- par( "usr" )
text( usr1[1] + strw/2, usr1[3] + strh/2, ann, cex= cex )
dev.copy2pdf( file= file )
}
虽然它与我通常生成的情节相当合理,但也许已经有更好的解决方案OOB?或者,也许,上面的脚本可以改进吗?
答案 0 :(得分:2)
编写包含dev.copy2pdf
的自己的函数是一个好主意,我认为你要做的很长。查看函数mtext
和title
,了解在边距中放置文本的不同方法。如果那些不完全符合您的要求,请在设置grconvertX
后使用grconvertY
和text
与par(xpd=NA)
。在所有情况下,您可能希望使用adj
参数来指定调整,而不是计算字符串宽度和高度,并将值移动一半。
答案 1 :(得分:1)
对于网格图形,我使用了以下内容,
library(gridExtra)
library(ggplot2)
p <- qplot(1, 1)
stamp <- paste("Data: Monday 24 June 2013",
strftime(Sys.time(), "Plotted: %A %d %B %Y @%H:%M"),
sep="\n")
grid.arrange(p, sub=textGrob(stamp, gp=gpar(cex=0.8, col="grey"),
hjust=1, vjust=0, x=1))