본문 바로가기
STATISTICS PLAYBOOK

통계를 이해하는
가장 빠른 길

R·Python·통계·데이터 분석 자격증까지, 체계적인 학습 자료와 강의는 메인 블로그에서 이어집니다.

R/R시각화

R 그래프 겹쳐 그리기와 범례 넣기: lines·points·legend 사용법

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

R 그래프 겹쳐 그리기는 첫 그래프를 plot()으로 만든 뒤 lines()와 points()를 순서대로 추가하는 방식이 기본입니다. 마지막에 legend()

로 색과 선 종류의 의미를 표시하면 비교하기 쉬운 그래프가 됩니다.

2026년 업데이트: base R의 plot(), lines(), points(), legend() 사용법은 R 4.6.1에서도 유효합니다. 추가한 그래프가 축 범위를 벗어나지 않도록 첫 plot()에서 xlim과 ylim을 미리 정하세요.

R 그래프 겹쳐 그리기 기본 순서

이번 시간에는 이전 포스팅의 복습 개념으로 하나의 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)
반응형

당신이 좋아할 만한 콘텐츠

댓글