[r] 개체에 플롯 저장
에서는 ggplot2
그래픽을 R 객체에 쉽게 저장할 수 있습니다.
p = ggplot(...) + geom_point() # does not display the graph
p # displays the graph
표준 함수 plot
는 그래픽을 void 함수로 생성하고 NULL을 반환합니다.
p = plot(1:10) # displays the graph
p # NULL
plot
에서 만든 그래픽을 개체에 저장할 수 있습니까?
답변
기본 그래픽은 장치에서 직접 그립니다.
당신은 사용할 수 있습니다
1- recordPlot
2- 최근에 도입 된 gridGraphics
패키지 , 기본 그래픽을 해당 그리드로 변환
여기에 최소한의 예가 있습니다.
plot(1:10)
p <- recordPlot()
plot.new() ## clean up device
p # redraw
## grab the scene as a grid object
library(gridGraphics)
library(grid)
grid.echo()
a <- grid.grab()
## draw it, changes optional
grid.newpage()
a <- editGrob(a, vp=viewport(width=unit(2,"in")), gp=gpar(fontsize=10))
grid.draw(a)
답변
나는 이것에 너무 늦었지만 내가 질문을 검색했을 때 나타난 첫 번째 질문이었습니다. 그래서 질문을 접하게 될 미래의 시청자를 위해 제 솔루션을 추가하고 싶습니다.
나는 객체 대신 함수를 사용하여 이것을 해결했습니다. 예를 들어, 다른 모수를 가진 두 개의 베타 분포를 비교한다고 가정합니다. 다음을 실행할 수 있습니다.
z1<-rbeta(10000,5,5)
z2<-rbeta(10000,20,20)
plotit<-function(vector,alpha,beta){
plot(density(vector),xlim=c(0,1))
abline(v=alpha/(alpha+beta),lty="longdash")
}
그리고 플롯을 객체가 아닌 함수 로 저장하십시오 .
z.plot1<-function(){plotit(z1,5,5)}
z.plot2<-function(){plotit(z2,20,20)}
다음으로 두 개의 플롯을 객체가 아닌 함수로 호출하여 원하는대로 각 플롯을 호출 할 수 있습니다.
z.plot1()
첫 번째 플롯을 플롯하고
z.plot2()
두 번째를 플롯합니다.
나중에 이것을 우연히 발견하는 사람에게 도움이되기를 바랍니다!
답변
pryr
생성 된 개체의 값을 직접 변경하지 않으려면 패키지 의 활성 바인딩 기능을 사용할 수 있습니다 .
library(pryr)
a %<a-% plot(1:10,1:10)
a
콘솔에 입력 할 때마다 그래프가 화면에 다시 인쇄됩니다. %<a-%
운영자는 스크립트를 (이것은 내가 생각하는 문제가되지 않습니다 하나의 그래프의 경우) 때마다 다시 실행됩니다. 따라서 본질적으로 a
코드 를 사용할 때마다 다시 실행되어 그래프가 생성되어 물론 조작 (다른 플롯을 위에 오버레이)하거나 png
예를 들어 저장할 수 있습니다. 값 자체는 저장되지 않습니다.a
그러나 . 값은 여전히 NULL입니다.
위의 내용이 귀하가 찾고있는 것인지는 모르겠지만 수용 가능한 솔루션 일 수 있습니다.
답변
library(ggplot2)
# if mygraph is a plot object
ggsave("myplot1.png",mygraph)
# if the plot is in a list (e.g. created by the Bibliometrics package)
ggsave("myplot1.png",mygraphs[[1]])