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

R을 사용한 논문용 그래프 - 3강. 범례 넣기와 그래프 겹쳐 그리기

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

이번 시간에는 이전 포스팅의 복습 개념으로 하나의 Plot에 여러개의 그래프를 겹쳐서 그리는 방법과 범례를 넣는 방법에 대하여 알아보도록 하겠다.

먼저 두개의 그래프를 생성하기 위한 데이터를 준비해보도록 하자. 오늘은 우리가 알고있는 대표적인 ‘예쁜’ 함수인 \(sin\)\(cos\) 함수를 그려보기로 하자.

x <- seq(0,2*pi, length.out = 100)
y <- sin(x)
z <- cos(x)

저번 포스팅에서와 마찬가지로 빈 팔래트를 준비하자.

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

# Generate empty plot
plot(c(-2,2),c(0,4),    # 점 두개 생성
     main = "Graph 겹쳐 그리기",
     xlab = "x",        # x 축 제목
     ylab = "",         # y 축 제목 생략
     xlim = c(0,2*pi),  # x축 범위
     ylim = c(-1,1),    # y축 범위
     type = 'n'         # '표시 안함'으로 설정
     )

# 배경 노란색으로 설정
loc <- par("usr")
rect(loc[1], loc[3], loc[2], loc[4],
     col = "lemonchiffon")

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

아래의 코드에서와 같이 준비된 x벡터와 y,z벡터를 points() 함수를 이용하여 두 개의 그래프를 주어진 plot안에 그릴 수 있다.

points(x,y, type = 'l', col = "Red")
points(x,z, type = 'l', col = "Blue")

위의 그래프를 좀 더 다듬기 위해서 y축의 숫자를 좀 더 읽기 쉽게 돌려 보도록 하자. 이것을 위해서는 plot()함수의 옵션인 las 값을 1 설정해 주면 된다. 위의 코드 부분 중 plot() 부분을 다음과 같이 설정하자.

plot(...
     las = 1,
     ...
     )

?par 명령어를 사용하여 las 옵션의 내용을 살펴보면 다음과 같다.

las(축 라벨 방향) 옵션의 종류는 {0,1,2,3} 네가지가 있다.
    0: 축과 언제나 평행[기본 옵션],
    1: 언제나 가로 방향,
    2: 언제나 축과 직각 방향,
    3: 언제나 세로 방향.

이 중 우리에게 필요한 것은 아래와 같이 읽기 편한 1번 옵션이다.

예제와 같이 두 개의 그래프를 겹쳐서 그릴 경우 각각의 선이 무엇을 의미하는 바를 추가해 줄 필요가 있다. 바로 범례를 추가해주어야 하는데 영어로 범례를 뜻하는 legend()함수를 이용하면 된다. legend() 함수의 문법은 다음과 같다.

legend(x, y = NULL, legend, col, bg, cex, ...)

처음 x, y는 범례가 위치할 좌표를 나타내며, legend 요소는 범례의 내용이 들어가게 된다. colbg는 각각 범례 내용의 색상과 범례 박스의 색상을 설정하는데에 사용된다. cex는 범례 안의 글자 크기를 조정하는 요소인데 1을 기준으로 팔레트 사이즈와 상대적인 크기를 정할 수 있다. 다음의 코드를 사용하여 범례를 나타내보았다.

legend(x = - 0.15, y = -0.6,
       col = c("red", "blue"),
       lty=1, bg = "white",
       legend = c("Sin x", "Cos x"),
       cex = 1)

필자의 설정에서는 범례의 크기가 커서 그래프를 가리는 상황이 벌어지는 것을 알 수 있다. 이 경우 cex 값을 0.7로 조정해주면 아래와 같이 범례의 크기가 그래프에 맞게 조정된 것을 볼 수 있다.

 

아래는 위의 그래프를 그리기 위한 R코드 전체이다.

par(bg = "light cyan")  # 팔레트 색깔 하늘색으로 설정
    
# Generate empty plot
plot(c(-2,2),c(0,4),    # 점 두개 생성
    main = "Graph 겹쳐 그리기",
    xlab = "x",        # x 축 제목
    ylab = "",         # y 축 제목 생략
    xlim = c(0,2*pi),  # x축 범위
    ylim = c(-1,1),    # y축 범위
    type = 'n',         # '표시 안함'으로 설정
    las = 1
    )
    
# 배경 노란색으로 설정
loc <- par("usr")
rect(loc[1], loc[3], loc[2], loc[4],
     col = "lemonchiffon")

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

# 두 개의 그래프 그리기
points(x,y, type = 'l', col = "Red")
points(x,z, type = 'l', col = "Blue")
legend(x = - 0.15, y = -0.6, legend=c("Sin x", "Cos x"),
       col=c("red", "blue"), lty=1, bg = "white", cex = 0.7)
반응형

댓글