티스토리 뷰

반응형

ggplot 으로 그래프를 그리다보면, x 축에 너무 많은 값들이 표기가되서 너무 빽빽하게 보이는 현상이 있다. 이건 아마도 문자열값(character)이다보니 발생하는 문제인데, 일부 대표값 혹은 본인이 원하는 특정값만 가지고 x축을 표현할 수 있다. 아래 그림을 보면, x 축의 값들이 너무 빽빽하다보니 중첩되서 알아볼 수 없게 된다.

t1 = tibble(연도 = paste0(as.character(2015:2026), '-01-01'),
              인구수 = c(1014, 1245, 1446, 1635, 1811, 1973, 
                      2123, 2261, 2388, 2504, 2609, 2704))
t1
# A tibble: 12 × 2
# 연도       인구수
# <chr>       <dbl>
# 1 2015-01-01   1014
# 2 2016-01-01   1245
# 3 2017-01-01   1446
# 4 2018-01-01   1635
# 5 2019-01-01   1811
ggplot(t1, aes(x = 연도, y = 인구수, group = 1)) + 
  geom_line()

 

이렇게 되는 원인은 사실 연도(x)로 지정된 값이 chr 값이기 때문이다.(그리고 aes 설정할때도 group=1 도 추가로 설정이 필요한 이유이다)  만약 숫자형이나 날짜형이었으면 이렇게 다 표현하지 않고 일부만 표현되게 되어있다.  그 예시는 이 포스팅 하단에 다시 언급하겠다. 

 

 

해결책은, scale_x_discrete 함수를 이용해서 일부 본인이 원하는 값만 x 축에 표시하도록 한다. 

ggplot(t1, aes(x = 연도, y = 인구수, group = 1)) + 
  geom_line() +
  scale_x_discrete(breaks = c('2015-01-01', '2021-01-01', '2026-01-01'))

 

자 이번엔 연도를 그냥 숫자 4자리로 셋팅해보자. x축을 보니 좀 이상하다. 2020.0 , 2022.5 이런 제멋대로의 값이 나온다.

t2 = tibble(연도 = 2015:2026,
              인구수 = c(1014, 1245, 1446, 1635, 1811, 1973, 
                      2123, 2261, 2388, 2504, 2609, 2704))
t2 %>% head
# A tibble: 6 × 2
# 연도 인구수
# <int>  <dbl>
# 1  2015   1014
# 2  2016   1245
# 3  2017   1446
# 4  2018   1635
# 5  2019   1811
# 6  2020   1973

ggplot(t2, aes(x = 연도, y = 인구수)) + 
  geom_line()

반응형

다시 정수로 원하는 구간으로 2년마다 하나씩 보여주고 싶으면 아래처럼 셋팅한다. 숫자형이다보니 아까 셋팅했던 group=1 의 설정을 삭제해도 된다.

ggplot(t2, aes(x = 연도, y = 인구수)) + 
  geom_line() +
  scale_x_continuous(breaks = seq(2015, 2026, 2))

 

마지막으로, date형으로 x축을 셋팅할 때는 ggplot 이 좀 다 알아서 하는 느낌이다. 매해 1월1일로 셋팅했는데 x 축은 연도만 나온다. 

t3 = tibble(연도 = as.Date(paste0(as.character(2015:2026), '-01-01')),
              인구수 = c(1014, 1245, 1446, 1635, 1811, 1973, 
                      2123, 2261, 2388, 2504, 2609, 2704))
t3 %>% head
# A tibble: 6 × 2
# 연도       인구수
# <date>      <dbl>
# 1 2015-01-01   1014
# 2 2016-01-01   1245
# 3 2017-01-01   1446
# 4 2018-01-01   1635
# 5 2019-01-01   1811
# 6 2020-01-01   1973

ggplot(t3, aes(x = 연도, y = 인구수)) + 
  geom_line()

 

원하는 날짜만 x 축에 표시하고 싶을때는 아래처럼 하면 된다.

ggplot(t3, aes(x = 연도, y = 인구수)) + 
  geom_line() +
  scale_x_continuous(breaks = as.Date(c('2015-01-01', '2022-01-01')))

 

ggplot2 x축 눈금 및 텍스트(레이블) 변경 방법

ggplot2 에서 x축의 눈금선(ticks) 위치와 레이블(label) 변경방법을 정리해본다. 이전 포스팅에서 그렸던 라인그래프를 가져와서 이용하긴 할텐데, 여기서도 다시 그릴거라 참고만 하시면 된다. ggplot

emflant.tistory.com

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함