본문 바로가기

[R] ggplot legend 범례 설정 (제목, 위치, 글씨)

R Programming/Data Visualization by Mandarim_ 2023. 12. 10.

R 프로그램으로 데이터를 시각화할 때, ggplot을 많이 사용한다.

이때 범례 (legend) 설정은 그래프의 이해를 돕는데 필수적인 요소이기 때문에, 내가 원하는 대로 설정할 수 있어야 한다.

특히, 지면(paper)을 아끼는 것이 상당히 중요한 순간도 있기 때문에, 범례를 간단하고 효과적으로 표현해야 하는데, 항상 기본 옵션만을 고집할 순 없다.

 


본 게시글은 R의 ggplot2 패키지를 사용한 그래프의 범례 수정하는 방법에 대해 쉬운 예제와 함께 간략히 소개한다.

예시로 사용하고자 하는 데이터와 그래프는 다음과 같다.

head(mtcars[, c("mpg", "wt", "gear", "carb")])

theme_set(theme_bw())
gg <- ggplot(mtcars) +
  geom_point(aes(x = wt, y = mpg, colour = factor(carb), shape = factor(gear)))
gg

 

기본 그림
기본 그림 (아무런 설정도 하지 않음)

 

ggplot을 그릴 때 사용하는 기본 테마는 theme_bw()를 사용한다.

다른 테마 보러 가기 -->

2023.11.02 - [R Programming/시각화] - [R] ggplot2 테마 적용으로 쉽게 그래프 꾸미기

반응형

1. 범례 제목

범례제목은 변수로 입력되는 값을 그대로 사용한다.

그렇기 때문에, 다음과 같이 그래프 생성하기 전 미리 아래의 코드와 같이 gear를 factor로 바꾼 다음에 사용할 수도 있다.

mtcars$carb <- factor(mtcars$carb)
mtcars$gear <- factor(mtcars$gear)

 

그래프 내에서 수정하기 위해선 labs() 함수를 사용할 수 있다.

ggplot의 제목(title=)이나 소제목(subtitle=) 등을 설정하는 함수인데,

labs() 함수는 colour와 shape의 이름 설정 외에도 fill 등의 다른 범례에 대한 제목도 설정할 수 있다.

 

변수 이름 자체를 처음부터 깔끔하게 정의해 두는 것도 좋지만,

특히, 한국어 제목을 설정할 땐, 변수 이름을 한국어로 설정하는 건 귀찮으니 다음과 같이 사용하는 게 좋다.

gg + labs(color="Carb", shape="Gear")

 

범례 이름 수정
범례 제목 이름 수정


2. 범례 위치

범례 위치를 수정하기 위해선 theme() 의 lgend.position 옵션을 사용할 수 있다.

기본 값인 오른쪽보단 아래나 위에 있는 게 가장 깔끔할 수도 있다. 그 외에도 "left", "right", "none" 옵션을 사용할 수 있다.

gg + theme(legend.position="bottom")
gg + theme(legend.position="top")

 

범례 위치 아래범례 위치 위
범례 위치 수정하기

 

윗 그림처럼 범례가 너무 많으면 복잡하기 때문에, 각 범례를 세로로 정렬하여 표현할 수도 있다.

gg + theme(legend.position="bottom",
           legend.box="vertical")

 

마지막으로, 지면 낭비를 막기 위해 그래프에 빈 공간이 있다면 그곳에 범례를 위치시켜도 좋다.

그래프의 가장 왼쪽 아래를 (0, 0), 가장 오른쪽 위를 (1, 1)로 생각하고 위치를 지정할 수 있다.

또한, legend.justification 옵션을 함께 사용하여, legend 의 위치를 맞춰줄 수도 있다.

gg + theme(legend.position=c(0.95, 0.95),
           legend.justification = c("right", "top"))

 

legend.justification을 설정하지 않으면 첫 번 째 그림처럼,

legend.position의 숫자 값을 계속 세밀하게 바꾸어 가며 그리고자 하는 legend 마다 legend가 잘려서 나타나지 않는 가장 적절한 위치를 찾아야 한다. 

legend.justrification 설정하지 않음 그림legend.justrification 설정한 그림
legend.justrification 설정에 따른 차이


3. 범례 강조

 

범례를 그래프 안에 그렸을 때, 그래프와 범례를 구분하기 위해선 범례의 background 설정이 필요하다.

이를 위해 element_rect()를 사용하여 아래와 같이 설정할 수 있다.

gg + labs(color="Carb", shape="Gear") + 
  theme(legend.position=c(0.95, 0.95),
        legend.justification = c("right", "top"),
        legend.background = element_rect(color = 'black', 
                                        size = 0.5))

 

legend background 설정
legend background 설정

 

그 외로 제목이나 내용의 글자를 수정하여 강조할 수도 있다.

이때, legend.title과 legend.text 옵션에 element_text()를 사용하여 나타낸다.

gg + labs(color="Carb", shape="Gear") + 
  theme(legend.position=c(0.95, 0.95),
        legend.justification = c("right", "top"),
        legend.background = element_rect(color = 'black'),
        legend.title = element_text(face = 2, size = 10),
        legend.text = element_text(face=2, size=10))

 

legend text 설정
legend text 설정

 


총 정리

  1. 범례 제목 수정: labs(colour =..., shape =..., fill =...)
  2. theme() 사용
    1. 범례 위치 수정: legend.position = "bottom", "top", "none", "left", "right" 혹은 좌표 지정 c(.. ,.. )
    2. 범례 배경 수정: legend.background = element_rect(color =..., size = ...) # 선의 color와 선의 size
    3. 범례 글씨 수정: legend.title, legend.text = element_text(face = ..., size=...) # 글자 기본(1), 굵게(2) 설정과 글씨 크기 설정
반응형