2019년 5월 3일 금요일

[R 강의] 그림의 label에 있는 수식을 바꿔가며 그리기

 논문에 넣을 그림을 그리는 경우 수식 표현을 이용하곤 합니다. R에서는 expression 함수를 이용해 수식을 만들고 그림에 넣습니다.
 예를 들어 1부터 10까지 1씩 증가하는 데이터를 생성한 뒤 이 값을 제곱하여 그리는 코드와 그림은 아래와 같습니다. y축 lab이 잘 안보여서 cex.lab로 크기를 크게 했는데 그림의 마진이 작아 잘려버려서 par(mar=c(아래 축 마진, 왼쪽 축 마진, 위 축 마진, 오른쪽 축 마진))으로 마진을 조정했습니다. 값을 늘리면 마진이 커져 그림이 작아집니다.

x<-1:10
par(mar = c(5, 5, 5, 5))
plot(x,x^2,type="l",ylab=expression(x^2),cex.lab=2)

<마진에 대한 이해를 돕기위한 그림>


 한 개만 그릴 때는 상관은 없지만 여러개의 그림을 경우 문제가 발생합니다. for 문을 이용해 5차까지 계산하고 y축 label을 expression(x^i)로 하여 x의 1차, x의 2차, ... , x의 5차로 표현하려고 하면 모든 그림의 y축 label은 x의 i차로 출력이 되버립니다.

for(i in c(1:5)){
  
  plot(x,x^i,type="l",ylab=expression(x^i),cex.lab=2)
  
}

 각각의 그림마다 다르게 출력하고 싶다면 expression 함수가 아닌 bquote 함수를 이용해야 합니다. ylab=bquote(x^.(i))로 바꾸면 우리가 원하는 결과를 얻을 수 있습니다. 수식을 그대로 쓰돼 i부분을 ( )로 감싼뒤 앞에 .을 넣으면 for 문의 i를 이용하게 됩니다.

for(i in c(1:5)){
  
  plot(x,x^i,type="l",ylab=bquote(x^.(i)),cex.lab=2)
  
}

 아래 첨자도 마찬가지로 위의 방법을 이용하시면 됩니다. 나중에 여러개의 수식이 이용된 그림을 그릴 때 이용하면 시간절약에 많은 도움이 됩니다.


※ 참고문헌
http://r.789695.n4.nabble.com/use-expression-in-a-loop-td856907.html
https://bookdown.org/ndphillips/YaRrr/plot-margins.html

0 개의 댓글:

댓글 쓰기