지난 포스팅에서 우리는 주어진 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)
꽤 긴 포스팅이 되었다. 다음 포스팅에는 한 그래프에 여러 함수를 그리는 방법과 여러개의 그래프를 동시에 그리는 방법에 대하여 알아보겠다. 혹시 이해가 되지 않는 부분은 댓글로 남겨주기 바란다.
'R > R시각화' 카테고리의 다른 글
r4issactoast을 이용한 XY-plot 쉽게 그리기 (0) | 2023.06.10 |
---|---|
R을 사용한 논문용 그래프 - 4강. 여러 그래프를 한번에 그리기 mfrow() (0) | 2023.06.10 |
R을 사용한 논문용 그래프 - 3강. 범례 넣기와 그래프 겹쳐 그리기 (0) | 2023.06.10 |
R을 사용한 논문용 그래프 그리기 - 1강. 축 및 배경 기준선 그리기 (0) | 2023.06.10 |
ggplot 산점도 완전 정복 (0) | 2021.01.06 |
댓글