티스토리 뷰

ggplot2 로 그래프를 그리다보면, 날짜별로 막대/선그래프를 그릴때가 있다. 날짜형식이다 보니, 월/일 아니면 일자만 나오게 하던가 또는 요일도 덧붙여서 나오게 하고 싶은 생각이 들곤 하는데 어떻게 설정해야할지 막막하다. 하지만 scale_x_date 함수를 사용하게되면 대부분의 x축상에 나타는 날짜 표현방식을 쉽게 설정할 수 있다. 아래의 경우는 일자(요일) 이런 방식으로만 표현했다.

 

 

오늘 다뤄볼 데이터는 질병관리청에서 관리하는 확진자수 데이터이고, 엑셀상의 데이터를 r로 읽을때, 날짜가 숫자형으로 나오기때문에 아래 소스상에 보면 아시듯이 origin 을 1899-12-30 으로 지정해서 변환했다. 어쨋든 최근 7일간의 확진자수를 가져왔다.

library(tidyverse)
library(patchwork)
library(readxl)
library(lubridate)

tb_covid1 = read_excel(path = "~/20220726/covid19_220726.xlsx")

tb_covid2 = tb_covid1 %>% 
  rename(date = 일자,  total = `계(명)`, local = `국내발생(명)`, 
         imported = `해외유입(명)`, deaths = `사망(명)`) %>% 
  tail(-1) %>% 
  mutate(date = as.Date(as.integer(date), origin = "1899-12-30")) %>% 
  mutate_at(3:5, str_replace, pattern = "-", replacement ="0") %>% 
  mutate_at(3:5, as.double) %>% 
  mutate(wday = wday(date, label = T), .after = date) %>% 
  mutate(month = month(date), .after = "wday") %>% 
  mutate(week = isoweek(date), .after = "month")
  
tb_covid_2207 = tb_covid2 %>% filter(date >= ymd('2022-07-26') - days(7-1))
# A tibble: 7 × 8
  date       wday  month  week total local imported deaths
  <date>     <ord> <dbl> <dbl> <dbl> <dbl>    <dbl>  <dbl>
1 2022-07-20 수        7    29 76379 75952      427     12
2 2022-07-21 목        7    29 71146 70829      317     17
3 2022-07-22 금        7    29 68603 68283      320     31
4 2022-07-23 토        7    29 68548 68255      293     30
5 2022-07-24 일        7    29 65428 65096      332     18
6 2022-07-25 월        7    30 35883 35540      343     17
7 2022-07-26 화        7    30 99327 98974      353     17

 

이 데이터를 활용해서 막대그래프를 그려보면, x축의 값이 내가 원하는 간격도 아니고, 표현방식도 요일은 나오지도 않고 있다.

ggplot(tb_covid_2207, aes(date, total)) +
  geom_col(width = 0.6)

 

이렇게 하면 듬성듬성 x축 표시가 매일 하나씩 나오게 된다.

ggplot(tb_covid_2207, aes(date, total)) +
  geom_col(width = 0.6) +
  scale_x_date(date_breaks = "1 days")

반응형

근데 내가 원하는 건 년도-월은 빼고, 일자에 요일만 붙여서 간략하게 하고 싶었다. 간단하다 아래와 같이 날짜 포맷을 지정해주면된다. 포맷관련 문자열 정보는 여기를 클릭해서 확인하면 된다.

ggplot(tb_covid_2207, aes(date, total)) +
  geom_col(width = 0.6) +
  scale_x_date(date_labels = "%d(%a)", date_breaks = "1 days")

 

그런데 한글로는 못하는 걸까? 아니다. locale설정만 바꿔주고 다시 그래프를 실행하면 된다.

Sys.setlocale("LC_ALL", "ko_KR.UTF-8")

 

이렇게 해서 완성한게, 아래 이미지 이다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함