[R] ggplot2 범례 위치 바꾸기, 범례 글자 크기 및 색깔 바꾸기, 범례 순서 바꾸기, 범례 없애기
R 분석과 프로그래밍/R 그래프_시각화 2017. 5. 27. 23:28이번 포스팅에서는 ggplot2로 그린 그래프에서
- (1) 범례 위치 바꾸기
(changing the position of legend)
- (2) 범례 글자 크기 및 색깔 바꾸기
(changing the size and color of the legend)
- (3) 범례 항목 순서 바꾸기
(changing the order of legend label)
- (4) 범례 없애기
(removing the legend)
등 범례(legend)를 다루는 방법에 대해서 알아보겠습니다.
MASS package의 Cars93 데이터프레임에 있는 '차종(Type)별 고속도로 연비(MPG.highway)' 박스 그래프를 가지고 예를 들어보겠습니다.
박스 그래프 디폴트 옵션으로 그리면 아래와 같은 결과가 나옵니다.
##--------------------------- # ggplot2 : legend ##--------------------------- library(MASS) library(ggplot2) # Boxplot of MPG.highway per Car Type mpg <- ggplot(Cars93, aes(x = Type, y = MPG.highway, fill = Type)) + geom_boxplot() + theme_bw() + ggtitle("MPG.highway per Car Type") mpg
|
(1) 범례 위치 바꾸기 (changing the position of legend) : theme(legend.position = "bottom") |
디폴트 세팅에서는 오른쪽("right")에 범례가 있습니다.
theme(legend.position) argument를 사용해서 범례 위치를 그래프 바깥쪽으로 해서 아래("bottom"), 왼쪽("left"), 위쪽("top")으로 차례대로 바꾸어 보겠습니다. (범례를 위쪽에 배치하는 것은 이상하게 보이네요. ^^;)
# (1) Changing the legend position # (1-1) outside the plot by using theme(legend.position = "right", "bottom", "left", "top") # bottom mpg + theme(legend.position = "bottom") # left mpg + theme(legend.position = "left") # top mpg + theme(legend.position = "top") |
범례를 놓고 싶은 위치의 x, y 좌표를 숫자 벡터로 입력을 해주면 그래프의 안쪽에도 범례를 집어넣을 수 있습니다. 이때 x, y 좌표는 0~1 사이의 실수 값을 넣어주면 됩니다. x 좌표에서는 0이 그래프 안쪽의 가장 왼쪽이고 1은 가장 오른쪽이 되며, y 좌표에서 0은 그래프 안쪽의 가장 아래쪽이고 1은 가장 위쪽 방향이 되겠습니다. 아래 예에서는 그래프의 오른쪽 상단에 여유 공간이 많이 있으므로 c(0.9, 0.8)의 숫자 벡터를 입력해서 범례를 우측 상단에 놓아 보겠습니다.
# (1-2) inside the plot by using the location vector c(x coordinate, y coordinate) mpg + theme(legend.position = c(0.9, 0.8)) # coordinate value : between 0 and 1 |
(2) 범례 글자 크기 및 색깔 바꾸기 (changing the size and color of the legend) : theme(legend.title = element_text(color, size, face)) : theme(legend.text = element_text(color, size, face)) |
범례의 글자 크기와 색깔, 폰트도 바꿀 수가 있습니다. 자유도가 높아 그래프를 예쁘게 꾸미고 싶은 분에게는 유용할 것입니다. 범례의 제목(title)과 레이블(label text)의 색을 파란색(color = "blue)으로 바꾸고, 범례 제목은 12 크기(size = 12)로 더 키우고, 범례 레이블은 8 크기로 좀더 작게 조정하겠습니다. 그리고 범례 제목은 굵게(face = "bold"), 범례 레이블은 이탤릭체(face = "italic")로 바꾸어 보겠습니다.
# (2) Changing the legend title and label size and color mpg + theme(legend.title = element_text(color = "blue", size = 12, face = "bold")) + # legend title theme(legend.text = element_text(color = "blue", size = 8, face = "italic")) # legend label |
(3) 범례 항목 순서 바꾸기 (changing the order of legend label) : factor(Type, levels = ("Compact", "Small", "Midsize", "Large", "Sporty", "Van") |
범례의 레이블 순서를 차종(Type)의 크기에 맞게 바꾸고 싶을 때는 ggplot2 에서 무얼 하는 것은 아니구요, 데이터너 전처리 단계에서 transform() 함수를 사용해서 factor(Type, levels = c("Compact", "Small", "Midsize", "Large", "Sporty", "Van") 처럼 요인(factor)의 levels 의 순서를 바꾸어 주면 됩니다. (ie, ordered factor)
이렇게 해주면 범례의 레이블 순서도 바뀌고, x 축의 항목들의 순서도 역시 바뀌게 됩니다.
> # (3) Changing the order of legend labels > # checking the levels and class of 'Type' variable > attributes(Cars93$Type) $levels [1] "Compact" "Large" "Midsize" "Small" "Sporty" "Van" $class [1] "factor" > > # changing the level's order of factor 'Type' > Cars93 <- transform(Cars93, + Type = factor(Type, levels = c("Compact", "Small", "Midsize", + "Large", "Sporty", "Van"))) > > attributes(Cars93$Type) $levels [1] "Compact" "Small" "Midsize" "Large" "Sporty" "Van" $class [1] "factor" > > mpg_legend_order_change <- ggplot(Cars93, aes(x = Type, y = MPG.highway, fill = Type)) + + geom_boxplot() + + theme_bw() + + ggtitle("Changing the order of legend labels by Car Size") > > mpg_legend_order_change
|
(4) 범례 없애기 (removing the legend) : theme(legend.title = element_blank()) : theme(legend.position = 'none') |
범례를 아예 없애고 싶을 때는 범례의 제목을 없애는 theme(legend.title = element_blank())와 범례의 레이블을 없애는 theme(legend.position = 'none') 의 두 개의 arguments 를 추가해주면 됩니다.
# (4) Removing the legend title and labels mpg + theme(legend.title = element_blank()) + # remove legend title theme(legend.position = 'none') # remove legend labels
|
이상으로 ggplot2로 그린 그래프의 범례(legend)를 설정하는 여러가지 방법을 알아보았습니다.
많은 도움 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾸욱 눌러주세요. ^^