2013-06-25 2 views
2

내 R 세션에 저장 한 그림과 그래프는 일반적으로 내 문서 용이므로 작업 디렉토리, 파일 이름 및 날짜를 ​​사용하여 주석을 달고 싶습니다. 내 문서를 하드 카피해야하므로 (묻지 마십시오) 내 삶이 편하게됩니다.R에서 저장된 모든 그림에 자동으로 주석을 달려면 어떻게합니까?

: 나는 인쇄 전에 PDF 파일의 수정 수 있다고 생각하지만 실제로 내가 dev.copy2pdf()와 그래픽을 생성하는 대부분의 시간 이후 R.

에 직접 스탬프 수치를 선호, 나는 다음과 같은 작은 기능을 섞어서

# 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

당신은 당신이하려는 플롯의 위치에서 원하는 주석을 받고있어, 왜 아무것도 변경? :-). 아마도 N 그래프 등을 반복하기 쉽게하기 위해 함수로 변환 할 수 있습니다. –

+0

글쎄, 나는 (내가 필요로하는 "편리한 작은 도구"의 일부이며, 언제나 내가 설치하는 패키지를 매일 설치한다. 작업). – January

답변

2

dev.copy2pdf을 감싸는 자신 만의 함수를 작성하는 것은 좋은 생각입니다. 저는 여러분이 먼 길을 가고 있다고 생각합니다. 여백에 텍스트를 배치하는 다른 방법에 대해서는 mtexttitle 함수를보십시오. 원하는 작업을 제대로 수행하지 못하면 par(xpd=NA)을 설정 한 후 grconvertXgrconvertYtext과 함께 사용하십시오. 모든 경우에 문자열 너비와 높이를 계산하고 값의 절반을 이동하는 대신 조정을 지정하려면 adj 인수를 사용할 수 있습니다.

그리드 그래픽 나는 다음을 사용했습니다 들어
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)) 

enter image description here

관련 문제