본문 바로가기
기본적인프로그래밍/R

[R] 쉽게 배우는 R programming 기초 (6) (plot 저장, 크기 조절)

by 인포메틱스 2020. 7. 14.
반응형

오늘 포스팅은 간단하게 진행하도록 하겠습니다.

 

블로그 주제를 너무 방대하게 잡아서 그런지 google애드고시도 떨어지고, 해서 다른 블로그도 파버렸습니다. 예측관련된 블로그이고 python을 위주로 포스팅을 하려고 합니다.

 

두집살림이라 좀 관리할거리가 많아 지네요.. ㅎㅎㅎ 광고나 많이 붙고 사람들이 많이 와주셔야하는데

 

아무튼 본론으로 들어가서! 블로그 유입 키워드를 보니 R에서 그림 크기 조절에 관련된 포스팅을 찾으시는 분들이 계셔서 그 부분을 포스팅해보고자 합니다.

 


R에서 그림 크기를 조절하기 위해서는 일단 상황이 많기 때문에 나누어서 설명하도록 하겠습니다.

 

1. 그림내부에 그래프 크기를 조절하기

 

내부그림을 조절하기 위해서는 par()라는 기능을 알아야 합니다.

 

par는 그림에서의 parameter들을 설정하는 기능입니다. 안에 기능들은 추후 정리해서 올리도록 하겠습니다.

 

그리고 par안에는 그림 크기를 조절하는 oma,mar가 있습니다.

 

oma, mar 둘 다 4방향의 크기 값들을 갖습니다. (순서대로 bottom, left, top, right)

 

mar의 경우 다음과 같은 코드를 진행했을때, mar의 기능을 알 수가 있습니다.

par(mar=c(1,1,1,1))
plot.new()
box()
mtext(1,1)
for(i in 2:10){
  par(new=T)
  par(mar=c(i,i,i,i))
  box()
  mtext(i,1)
}

 

oma의 경우에는 아까와 같은 코드를 사용했을때, 역시 기능을 알수가 있습니다.

par(oma=c(1,1,1,1))
plot.new()
box()
mtext(1,1)
for(i in 2:5){
  par(new=T)
  par(oma=c(i,i,i,i))
  box()
  mtext(i,1)
}

이해를 못 하셧을 경우를 대비하여  설명을 하자면, oma는 가장 외곽과 그림사이 거리이고, mar는 실제 그림과 가까운 사이 거리입니다.

 

oma가 커지면 커질수록 안에 내부 그림의 크가 줄어듭니다.

mar의 경우 default값인 c(5,4,4,2)를 기준으로 작으면, 그만큼 그림의 크기가 커지나, oma를 넘어가면 짤리게 됩니다.

 

다음 코드를 보시면 mar에 대해 조금 더 알 수 있습니다.

par(mar=c(1,1,1,1))
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')

for(i in seq(from=1,to=10,by = 3)){
  par(new=T)
  par(mar=c(i,i,i,i))
  plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
  
}

 

초창기 mar가 c(1,1,1,1)일 때는 xlab, ylab이 안보이지만, mar안에 크기가 커지면서 xlab이 보이기 시작합니다.

 

다음 코드를 보시면 oma에 대해 조금 더 알 수 있습니다.

par(mfrow=c(2,2))
par(oma=c(1,1,1,1))
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')

par(mfrow=c(2,2))
par(oma=c(4,4,4,4))
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')
plot(1,1,main='Test plot!!',xlab='Test xlab',ylab='Test ylab')

 

mfrow= 그림을 여러개 그릴때 필요한 기능입니다. row먼저 그림이 삽입됩니다. 비슷한 기능으로 mfcol이 있습니다.(column먼저 그림 삽입)

oma=c(1,1,1,1)

 

oma=c(4,4,4,4)

보시면 여러 그림을 추가할 때, 또 다른 margin 부분의 차이가 나는 것을 확인(oma)할 수 있습니다.

 

 

2. 그림 전체적인 크기를 조절하기

 

단순히 저장 문제라면 더 쉽습니다.

bmp(filename = "Rplot%03d.bmp",
    width = 480, height = 480, units = "px", pointsize = 12,
    bg = "white", res = NA, ...,
    type = c("cairo", "Xlib", "quartz"), antialias)

jpeg(filename = "Rplot%03d.jpeg",
     width = 480, height = 480, units = "px", pointsize = 12,
     quality = 75,
     bg = "white", res = NA, ...,
     type = c("cairo", "Xlib", "quartz"), antialias)

png(filename = "Rplot%03d.png",
    width = 480, height = 480, units = "px", pointsize = 12,
     bg = "white",  res = NA, ...,
    type = c("cairo", "cairo-png", "Xlib", "quartz"), antialias)

tiff(filename = "Rplot%03d.tiff",
     width = 480, height = 480, units = "px", pointsize = 12,
     compression = c("none", "rle", "lzw", "jpeg", "zip", "lzw+p", "zip+p"),
     bg = "white", res = NA,  ...,
     type = c("cairo", "Xlib", "quartz"), antialias)

svg(filename = if(onefile) "Rplots.svg" else "Rplot%03d.svg",
    width = 7, height = 7, pointsize = 12,
    onefile = FALSE, family = "sans", bg = "white",
    antialias = c("default", "none", "gray", "subpixel"))

cairo_pdf(filename = if(onefile) "Rplots.pdf" else "Rplot%03d.pdf",
          width = 7, height = 7, pointsize = 12,
          onefile = FALSE, family = "sans", bg = "white",
          antialias = c("default", "none", "gray", "subpixel"),
          fallback_resolution = 300)

cairo_ps(filename = if(onefile) "Rplots.ps" else "Rplot%03d.ps",
         width = 7, height = 7, pointsize = 12,
         onefile = FALSE, family = "sans", bg = "white",
         antialias = c("default", "none", "gray", "subpixel"),
         fallback_resolution = 300)
  

원하는 포멧을 이용하여 filename 너비, 높이만 지정을 해주시고 dev.off() 혹은 graphics.off()를 이용하시면 됩니다.

 

 

 


모르는 부분이 있으시면 댓글로 써주시면 답해드립니다!

 

감사합니다!

728x90
반응형

댓글