scales::label_date_short 함수 사용법

R의 scales 패키지에 포함된 label_date_short() 함수는 데이터 시각화(특히 ggplot2)에서 날짜 축의 라벨을 가장 효율적이고 간결하게 만들어주는 아주 똑똑한 함수이다. 기존의 label_date()가 고정된 형식을 반복한다면, label_date_short()는 데이터의 범위에 따라 형식을 유동적으로 변화시킨다.

월별 데이터 일때,

이 함수는 사용자가 이미 알고 있는 정보는 과감히 생략한다. 예를 들어, 모든 데이터가 2026년 내에 있다면 모든 눈금에 “2026"을 표시하는 대신, 첫 번째 눈금이나 연도가 바뀌는 지점에서만 연도를 표시하고 나머지는 월/일만 표시한다.

v1 = ymd('2026-03-15', '2026-04-15', '2026-05-15')

> label_date_short()(v1)
[1] "15\nMar\n2026" "15\nApr"       "15\nMay"

원하는 포맷으로 안나온다면 직접 설정가능하며, 벡터형식으로 아래와 같이 설정해야 한다. %Y %m %d 처럼 하나의 문자열로 지정하면 안되니, 유의하자.

> label_date_short(format = c("%Y", "%m", "%d"))(v1)
[1] "15\n03\n2026" "15\n04"       "15\n05"

일자별 데이터일때,

일자만 변화가 있다면 최초에 월/년 표시가 나오고 나머지는 일자만 출력된다.

v2 = ymd('2026-04-15', '2026-04-16', '2026-04-17')

> label_date_short()(v2)
[1] "15\nApr\n2026" "16"            "17"

만약 일자변동이 있는데, 일자 포맷을 넣지 않는다면 아래와 같이 변환이 제대로 되지 않는다.

> label_date_short(format = c("%Y", "%b"))(v2)
[1] "Apr\n2026"  "2026-04-16" "2026-04-17"

포맷을 합쳐서 넣어도 변환이 잘되지 않는다.

> label_date_short(format = c("%Y", "%m/%d"))(v2)
[1] "04/15\n2026" "2026-04-16"  "2026-04-17" 

아래처럼 벡터 요소로 잘 나눠서 입력해야 한다.

> label_date_short(format = c("%Y", "%m", "%d"))(v2)
[1] "15\n04\n2026" "16"           "17"  

월 표시앞에 0 제거

만약 1년치 월단위 날짜를 만들어 사용할때, 월수 앞에 0 을 없애고싶은데, 사실 바로 적용할수는 없고, 약간의 문자열 치환을 해야 한다.

v3 = seq.Date(ymd('2025-04-01'), ymd('2026-04-01'), by = "month")
# [1] "2025-04-01" "2025-05-01" "2025-06-01" "2025-07-01" "2025-08-01" "2025-09-01" "2025-10-01"
# [8] "2025-11-01" "2025-12-01" "2026-01-01" "2026-02-01" "2026-03-01" "2026-04-01"

> label_date_short(format = c("%Y", "%m월"))(v3)
 [1] "04월\n2025" "05월"       "06월"       "07월"       "08월"       "09월"       "10월"      
 [8] "11월"       "12월"       "01월\n2026" "02월"       "03월"       "04월"    

정규표현식으로 그 부분을 찾아 제거하는 방식으로 하면 된다.

> label_date_short(format = c("%Y", "%m월"))(v3) |> 
  str_replace("^0", "")
[1] "4월\n2025" "5월"       "6월"       "7월"       "8월"       "9월"       "10월"     
[8] "11월"      "12월"      "1월\n2026" "2월"       "3월"       "4월"