본문 바로가기
R/R시각화

R을 사용한 논문용 그래프 - 2강. 배경색 지정 및 수학 기호로 제목 달기

by 슬통이 2023. 6. 10.
반응형

지난 포스팅에서 우리는 주어진 x벡터와 y벡터를 가지고 그래프를 그리는 방법에 대하여 알아봤다. 포인트를 선으로 바꾸는 방법과 보여지는 축의 범위를 조정하고 x, y축을 표시하여 아래와 같은 그래프를 얻을 수 있었다.

지금도 충분히 처음 plot()을 사용했을 때보다 그럴싸 해보이지만, 아직 몇 가지 할 일이 남았다. 먼저 그래프 제목과 x, y 축의 제목을 달아보도록 하자.

이것을 위해서는 다음과 같이 plot() 함수의 main, xlab, 그리고 ylab 항목을 알맞게 설정하면 된다.

x <- seq(-10, 10, length.out = 100) y <- x^2 plot(x,y,      main = "y = x^2 그래프",     # 제목 설정      xlab = "x 축",               # x 축 제목      ylab = "y 축",               # y 축 제목      xlim = c(-2,2),              # x 축 범위 설정      ylim = c(0,4),               # y 축 범위 설정      type = 'l',                  # 라인 타입 '라인'으로 설정      col = "Blue"                 # 색 설정      )  # 참조선 넣기 abline(h = 0:4, v = -2:2, col = "Gray", lty=3) abline( v = 0, lty = 1)           # adding y axis abline( h = 0, lty = 1)           # adding x axis

위의 코드에서 알 수 있듯, main 항목에 “”를 사용하여 문자열을 넣어주면 그것이 그래프에 반영된다. 하지만 한가지 문제점은 우리는 수학기호 \(y=x^2\)가 보여지는 것을 원했으나 결과값은 “x^2” 과 같이 쿨하지 못하게 나온것을 확인할 수 있다. 이 부분은 expression() 함수를 이용하여 다음과 같이 바꿔줄 수 있다. 위 코드의 main항목을 다음과 같이 바꿔보자.

plot(...      main = expression(paste(y, " = ", x^2, " 그래프")),      ...      )

아래와 같이 제목이 예쁘게 출력되는 것을 확인 할 수 있다.

위의 코드에서 paste() 함수가 쓰였는데, 이 함수는 의미 그대로 여러개의 문자열을 하나로 합쳐주는 함수이다. 이 함수에 대해서는 추후 문자열 다루기 포스팅에서 자세히 설명할 예정이므로 간단한 예제를 통하여 개념만 알고 넘어가도록 하자. 다음의 R 코드는 “치킨”, " 맥주“, 두 개의 문자열을 하나로 합쳐주는 코드이다.

paste("치킨", "맥주")
## [1] "치킨 맥주"

우리가 좋아하는 치맥이 반환되었다.

제목과 축 제목까지 첨가된 그래프가 이제 제법 쿨(Cool)해 보인다. 하지만 어딘지 모르게 칙칙한 느낌이 든다. 흰색과 검정색 뿐인 이 칙칙함에서 벗어나기 위해 색깔을 넣어 보도록 하자. 이제부터 설명할 내용은 배경색을 넣는 방법을 설명할 것인데, 조금 어렵게 느껴지는 독자도 있을 것이라 생각한다. 하지만 차근차근 설명을 따라가면 충분히 이해할 수 있을 것이므로 걱정하지 말자.

시작하기에 앞서 이번 포스팅의 마지막에 어떤 그래프를 얻게 될 지 미리 결과를 보여주도록 하겠다. 예쁜 그래프를 보면 조금이라도 동기부여가 될 것이다.

형형색색의 그래프를 보고 있자니 코드 공부를 하고 싶은 욕망이 생겨난다. 다음은 위의 그래프를 만들기 위한 코드이다.

# set the color of pallet
par(bg = "light cyan")

# Generate empty plot
plot(c(-2,2),c(0,4),    # just two points
	 main = expression(paste("Plot of ", y, " = ", x^2)),
     xlab = "x axis",
     ylab = "y axis",
     xlim = c(-2,2),
     ylim = c(0,4),
     type = 'n', # line type is null!
     col = "Blue")
     
# Draw gray rectangle
loc <- par("usr")
rect(loc[1], loc[3], loc[2], loc[4], col = "lemonchiffon")

# Draw a red line
points(x,y, type = 'l', col = "Red")

# Setting reference lines
abline(h = 0:4, v = -2:2, col = "black", lty=3)
abline( v = 0, lty = 1)
abline( h = 0, lty = 1)

시작부터 처음보는 par()라는 명령어가 보인다.

우리가 처음으로 이해해야 할 개념이 바로 이 명령어와 관련된 개념인 ‘팔렛트’ 개념이다. 이제까지 우리가 팔렛트의 개념을 이야기 하지 않은 이유는 그래프를 한 개만 그리면 되었기 때문이다. 여러 개의 그래프를 그리기 위해서 팔렛트를 조정해주는 작업이 필요한데 이것은 다음 시간에 설명하도록 하겠다. 지금은 이 팔렛트가 무엇인지만 이해하고 넘어가도록 하자.

’팔렛트’는 말 그대로 그래프를 그리기 위한 가상의 스케치북(혹은 나무판자)이라고 생각하면 쉽다. 이것을 이해하기 위해서 다음과 같은 명령어를 사용하여 스케치북 색깔을 노란색으로 바꿔보자.

par(bg = "Yellow")

이 명령어 만을 입력하면 아무것도 일어나지 않는 것처럼 보이지만 그 이유는 아직 우리가 아무것도 그리지 않았기 때문이다. 추가적으로 명령어 plot(c(0,1),c(0,1), type = ‘n’)를 입력하여 보자.

par(bg = "Yellow") plot(c(0,1),c(0,1), type = 'n')

위와 같이, 노란색의 팔렛트를 확인 할 수 있다. 이전까지는 기본색인 흰색으로 설정되어 있었기 때문에 우리가 인지하지 못했던 것이다. 즉, R에서 그래프를 그릴때 그리기 전에 R은 가상의 스케치북을 준비하고 그 위에 그래프를 그리는 것이라고 생각하면 된다. plot(c(0,1),c(0,1), type = ‘n’) 명령어는 두 개의 점, (0,0)과 (1,1),을 그리되 표시하지는 말라는 의미이다. 실제 두 점을 확인하고 싶은 독자는 ’n’을 ’p’로 바꿔보면 양쪽 모서리에 찍힌 두 개의 점을 확인 할 수 있다.

그래프 배경색 변경은 rect() 함수를 사용하여 변경한다. 이 함수는 사각형(rectangle)을 원하는 위치에 그릴 수 있도록 해주는 함수이며 문법은 다음과 같다.

rect(xleft, ybottom, xright, ytop,
     density = NULL, angle = 45,
     col = NA, border = NULL, 
     lty = par("lty"), lwd = par("lwd"), ...)

따라서, x축 0에서부터 1까지, y축 0에서부터 1까지 넓이 1의 사각형을 rect() 함수를 이용하여 그려보도록 하자.

par(bg = "Yellow")
plot(c(0,1), c(0,1))
loc <- par("usr")
rect(0,0,1,1, col = "blue")    #사각형 그리기

그래프에서 알 수 있듯, 배경색을 채우기 위해서는 우리가 그린 사각형보다 살짝 더 큰 사각형을 사용해야 하는 것을 알 수 있다. 하지만 정확한 좌표를 찾기가 어렵다는 것이 문제이다. 이 문제를 해결하기 위해 사용된 코드가 바로 par(“usr”) 부분인데 여기에 그래프의 실제 보이는 범위의 좌표가 저장되어 있다. 이 정보를 loc 변수에 저장 시켜 놓았으므로 실제 좌표를 확인해 보자.

loc
## [1] -0.04  1.04 -0.04  1.04

loc 변수의 값은 차례로 왼쪽 x값, 오른쪽 x값, 아래쪽 y값, 위쪽 y값을 의미한다. 숫자에서 알 수 있듯, 우리가 그린 사각다형의 각 끝점보다 그래프 사각형의 끝점이 0.04만큼의 크다.

이 사실을 이용하여 다음과 같이 그래프의 전체 영역에 딱 맞는 사각형을 그릴 수 있다.

par(bg = "light cyan")
plot(c(0,1), c(0,1))
loc <- par("usr")
rect(loc[1], loc[3], loc[2], loc[4], col = "lemonchiffon")

자, 이제 그려진 그래프 위에 우리가 그리고 싶은 점들을 추가하는 일만이 남았다. 이미 우리가 처음 함수를 셋팅하기 위하여 plot()를 사용하였기 때문에, 다시 한번 사용하지 못하는 관계로 다음과 같이 points() 함수를 이용하여 점 두 개를 추가해보자. (plot()을 사용하여 추가하면 그래프가 다시 리셋되어 이제까지 작업한 것들이 무용지물이 된다.)

par(bg = "light cyan")
lot(c(0,1), c(0,1))
loc <- par("usr")
rect(loc[1], loc[3], loc[2], loc[4], col = "lemonchiffon")
points(c(0,1),c(0,1), type = 'p', col = "Red")

예상대로 두 개의 빨간 점이 추가된 것을 확인할 수 있다. 이제까지의 학습한 내용을 바탕으로 설명하기 전에 보여주었던 R코드를 다시 한번 살펴보면 한줄 한줄 모두 이해할 수 있을 것이다.

# 팔레트 색깔 하늘색으로 설정
par(bg = "light cyan")

# Generate empty plot
plot(c(-2,2),c(0,4),    # 점 두 개 생성
	 main = expression(paste("Plot of ", y, " = ", x^2)),
     xlab = "x axis",   # x 축 제목
     ylab = "y axis",   # y 축 제목
     xlim = c(-2,2),    # x축 범위
     ylim = c(0,4),     # y축 범위
     type = 'n'         # '표시 안함'으로 설정
     )
배경 노란색으로 설정
loc <- par("usr")
rect(loc[1], loc[3], loc[2], loc[4], col = "lemonchiffon")

# 빨간선을 사용하여 데이터 표시 
points(x,y, type = 'l', col = "Red")

# 참조선 작업(이전 포스팅 참조)
abline(h = 0:4, v = -2:2, col = "black", lty=3)
abline( v = 0, lty = 1) abline( h = 0, lty = 1)

 

꽤 긴 포스팅이 되었다. 다음 포스팅에는 한 그래프에 여러 함수를 그리는 방법과 여러개의 그래프를 동시에 그리는 방법에 대하여 알아보겠다. 혹시 이해가 되지 않는 부분은 댓글로 남겨주기 바란다.

반응형

댓글