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월"