디스크에 플롯을 이미지로 저장하는 방법은 무엇입니까?


304

R을 사용하여 간단한 선형 회귀를 플로팅합니다. 해당 이미지를 PNG 또는 JPEG로 저장하고 싶습니다. 자동으로 할 수 있습니까? (코드를 통해)

두 가지 다른 질문이 있습니다. 첫째, 이미 모니터에서 줄거리를보고 있는데 그대로 저장하고 싶습니다. 둘째, 아직 플롯을 생성하지 않았지만 플로팅 코드를 실행할 때 직접 플롯을 디스크에 저장하고 싶습니다.


아마도이 질문은 두 가지 시나리오에 대해 질문하기 위해 편집해야 할 것입니다. 첫째, 대화식으로 작업하고 저장하려는 멋진 음모를 만들었습니다. 또는 두 번째로, 아직 플롯을 보지 않았으며 먼저 보지 않고 디스크에 직접 쓰려고합니다. 많은 플롯을 생성하는 스크립트를 작성하는 경우이 방법이 적합합니다. 지금 편집하겠습니다
Aaron McDaid

답변:


376

밀접하게 관련된 두 가지 질문과 각각에 대한 답변이 있습니다.


1. 나중에 스크립트에서 이미지가 생성됩니다. 어떻게 디스크에 저장합니까?

플롯을 저장하려면 다음을 수행해야합니다.

  1. 사용하여, 장치를 열고 png(), bmp(), pdf()또는 유사한
  2. 모델 플롯
  3. 사용하여 장치를 닫습니다 dev.off()

플롯을 png파일로 저장하기위한 예제 코드 :

fit <- lm(some ~ model)

png(filename="your/file/location/name.png")
plot(fit)
dev.off()

이것은 그래픽 형식에 대한 (결합) 도움말 페이지에 설명되어 있습니다 ?png, ?bmp, ?jpeg?tiff뿐만 아니라에 대한 별도의 도움말 페이지에서 ?pdf.

그러나 예를 들어 화면 창 크기를 조정 한 경우 이미지가 화면에 직접 플롯 된 동일한 플롯으로 디스크에서 이미지가 다르게 보일 수 있습니다.


플롯 중 하나에 의해 플롯이 작성 lattice되거나 ggplot2플롯을 명시 적으로 인쇄해야하는 경우에 유의하십시오 . 이것을 자세히 설명하고 R FAQ에 링크 된이 답변을보십시오 : ggplot의 qplot은 소싱시 실행되지 않습니다.


2. 현재 화면에서 플롯을보고 있는데 '있는 그대로'디스크에 복사하려고합니다.

dev.print(pdf, 'filename.pdf')

대화식 창에서 수행 한 크기 조정을 고려하여 이미지를 완벽하게 복사해야합니다. 이 답변의 첫 번째 부분 pdf과 같이와 같은 다른 파일 형식으로 바꿀 수 있습니다 png.


4
png (filename = "name.png")와 같이 경로를 설정하지 않으면 다음과 같이 save 디렉토리를 알 수 있습니다.getwd()
JuanPablo

2
에 대한 참조를 포함하도록이 답변을 확장했습니다 dev.print. 다른 답변이 필요하다고 생각되는 두 가지 밀접한 관련 질문이 있습니다. 두 번째 하위 질문은 기본적으로 "내 화면에 이미 플롯 한 이미지를 어떻게 저장합니까?"입니다. 편집 내용이 좋지 않은 경우 편집을 자유롭게 개선하십시오.
Aaron McDaid

R이 "선택"을 요청할 때 어떻게해야합니까? 예를 들어 내가 사용하는 경우 m3=garchFit(~arma(3,0)+garch(1,1))plot(m3).
jacob

3
dpi = 3000으로 그림을 저장하는 방법
Abhishek

2
알지 못하고 R을 사용하는 8 년은 실제로 화면에서 열린 개발자를 파일로 저장할 수 있습니다. 나는 그것이 필요하지 않은 것 같아요 ...하지만 많은 감사합니다 : D
Simon C.

82

R에서 플롯을 계속 보려면 다른 옵션을 사용하십시오 dev.copy.

X11 ()
plot (x,y)

dev.copy(jpeg,filename="plot.jpg");
dev.off ();

R에서 너무 많은 플롯 윈도우가 복잡해지면 graphics.off()모든 플롯 윈도우를 닫으십시오.


2
좋은 대답입니다! 이를 통해 결과에 만족할 때까지 X를 통해 플롯을 실험 한 다음 그 자리에 저장할 수 있습니다. 일반적으로 가장 편리한 작동 모드입니다.
Aaron McDaid

3
dev.print화면에서 이미지를 정확하게 복사하기 때문에 더 좋습니다. dev.copy기본적으로 모든 이미지를 정사각형으로 만듭니다. 대화식으로 모든 것을 멋지게 설정하면 실망 스러울 것입니다.
Aaron McDaid

4
I 사용 dev.print()치수를 정의 폭과 높이 매개 변수. 예 : dev.copy(device = png, filename = 'MyPlot.png', width = 1000, height = 500) dev.off()
Scott

72

ggplot2원하는 저장 방법 을 사용 하는 경우를 사용 하는 것입니다 ggsave. 먼저 호출하는 플롯을 만든 후 플롯해야합니다 ggsave.

ggplot(...)
ggsave("plot.png")

이미지 형식은 파일 이름으로 선택한 확장자에 따라 결정됩니다. 추가 매개 변수로 전달 될 수있다 ggsave, 특히 width, height하고 dpi.


이 루프에서 잘 작동 dev.off 나를 위해 작동하지 않았다
princelySid

이것의 상승은 일관성있는 API와와 기기 소등 엉망 필요하다
qwr

의 솔루션과 달리이 솔루션은 dev그래픽 장치가없는 가상 시스템에서 작동했습니다.
miguelmorin

나는 R의 모든 음모에 대해 강력하면서도 간단한 접근 방식이 있었으면 좋겠다. 어쨌든 내 투표는 여기에 간다.
SilSur

1
거의 7 년 동안 유효합니다! 감사합니다.
Nick

30

이렇게

png('filename.png')
# make plot
dev.off()

아니면 이거

# sometimes plots do better in vector graphics
svg('filename.svg')
# make plot
dev.off()

아니면 이거

pdf('filename.pdf')
# make plot
dev.off()

그리고 아마도 다른 사람들도. 도움말 페이지에 모두 함께 나열되어 있습니다.


R이 파일 확장자를 자동으로 추론 할 수있는 방법이 있습니까? 파일 이름과 사용 된 함수를 변경해야하는 것은 지루한 것 같습니다.
Bonlenfum

11

첫 번째 질문은 dev.print대화식으로 작업 할 때 최고 라고 생각 합니다. 먼저, 플롯을 시각적으로 설정하고보고있는 내용에 만족하면 R에 현재 플롯을 디스크에 저장하도록 요청할 수 있습니다.

dev.print(pdf, file="filename.pdf");

pdf와 같은 다른 형식으로 바꿀 수 있습니다 png.

이미지가 화면에 표시된 그대로 정확하게 복사됩니다. 문제 dev.copy는 이미지가 종종 다르고 창 크기와 종횡비를 기억하지 못한다는 것입니다. 기본적으로 플롯은 정사각형이됩니다.

두 번째 질문 (다른 사람들이 이미 대답했듯이)의 플로팅 명령을 실행하기 전에 출력을 디스크로 보내야합니다.

pdf('filename.pdf')
plot( yourdata )
points (some_more_data)
dev.off() # to complete the writing process and return output to your monitor

8

R Studio http://rstudio.org/ 를 사용하는 경우 원하는 형식과 원하는 해상도로 플롯을 저장하는 특수 메뉴가 있습니다


4
이것은 적어도 Windows의 R GUI에도 존재합니다.
richiemorrisroe

때때로 이것은 신비롭게도 실패하지만 함수 호출은 항상 작동합니다
qwr

3

당신이 사용하는 디바이스를 열 경우 png(), bmp(), pdf()에 의해 제안 등 Andrie (가장 좋은 답), 플롯과 창문이 열려 팝업되지 않습니다, 단지 * .PNG, * BMP 또는 * .PDF 파일이 생성됩니다. R은 제한된 수의 그래픽 창만 처리 할 수 ​​있기 때문에 대규모 계산에 편리합니다.

그러나 플롯을보고 저장하려는 경우 savePlot(filename, type)플롯을 그린 후 플롯이 포함 된 창이 활성화 된 후 호출 합니다.



0

이 답변에 추가하기 위해 화면에 플롯을 생성하는 호출 (기본 장치)을 포함하는 R 스크립트가있는 경우 모두 pdf 파일 (비 대화식 쉘의 기본 장치) "Rplots.pdf에 저장할 수 있습니다. "(기본 이름) 터미널에서 스크립트를 R로 리디렉션하여 (리눅스 또는 OS X를 실행한다고 가정) 예 :

R < myscript.R --no-save

필요에 따라 jpg / png로 변환 할 수 있습니다


0

어떤 경우에는 기본 r 플롯을 저장하고 인쇄하려고합니다. 나는 약간의 시간을 보냈고이 유틸리티 기능을 생각해 냈습니다.

x = 1:10

basesave = function(expr, filename, print=T) {
  #extension
  exten = stringr::str_match(filename, "\\.(\\w+)$")[, 2]

  switch(exten,
         png = {
           png(filename)
           eval(expr, envir = parent.frame())
           dev.off()
         },
         {stop("filetype not recognized")})


  #print?
  if (print) eval(expr, envir = parent.frame())

  invisible(NULL)
}

#plots, but doesn't save
plot(x)

#saves, but doesn't plot
png("test.png")
plot(x)
dev.off()

#both
basesave(quote(plot(x)), "test.png")

#works with pipe too
quote(plot(x)) %>% basesave("test.png")

하나를 사용해야합니다 quote. 그렇지 않으면 plot(x)전역 환경에서 호출이 실행되어 NULL전달됩니다 basesave().


0
dev.copy(png,'path/pngFile.png')
plot(YData ~ XData, data = mydata)
dev.off()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.