여러 그래프를 하나의 대시보드로 만들기

R프로그래밍으로 대시보드 이미지를 만들 수 있다. 터치나 클릭도 하면서 보는 인터렉티브한 대시보드는 아니지만, patchwork 패키지를 사용하면 아래와 같이 막대그래프, 원그래프, 꺾은선그래프를 하나의 대시보드로 쉽게 구성할 수 있다. 그 방법을 간단하게 정리해본다.

1. 막대그래프 만들기

월별로 막대그래프를 만들기 위해 아래 데이터를 준비했고, 음수와 양수 막대그래프를 각각 다른 색을 주기 위해 컬럼을 하나 더 추가했다.

t1 = tibble(x = seq(ymd('20231101'), ymd('20240301'), by = "month"), 
            y = c(-49, -42, -2, 104, 29)) |> 
  mutate(c = ifelse(y > 0, T, F))

데이터를 이용하여 막대그래프를 그린다. 막대마다 텍스트를 추가하기 위해, 기존 y값에 높이조정을 해줬다.

ggplot(t1) + 
  geom_col(aes(x, y, fill = c)) +
  geom_text(aes(x, y + ifelse(y > 0, 10, -10), label = y)) 

2. 원그래프 만들기

2개의 원을 그리기위해 아래와 같이 데이터를 준비한다.

t2 = tibble(x = c(ymd('20240201'), ymd('20240301')), 
            y = c(1, 1), s = c(62, 65))

조금 복잡하긴 한데, 나중에 geom_point 그래프에 대해서 따로 정리해볼까한다. 기본적으로 geom_point 로 큰 점을 2개 그리고, 그 안에 텍스트를 추가했다. 마지막으로 x 축의 범위를 제한하기 위해 scale_x_date 설정도 했다.

ggplot(t2) +
  geom_point(aes(x,y, colour = factor(s), size = s)) +
  geom_text(aes(x,y,label = s), colour = "gray100", 
            size = c(6,8) * 1.4, family = v_font_bold2) +
  scale_size_continuous(range = c(30, 40)) +
  scale_x_date(limits = c(ymd('20240120'),ymd('20240315')),
               date_breaks = "1 month",
               date_labels = "%b")

3. 꺾은선그래프

아래 준비해놓은 파일을 받아서 데이터를 읽는다.

다운로드 data_rates.csv

rates3 = read_csv('./2024/20240510/data_rates.csv')

geom_line로 선그래프를 그리고, 꺾이는 지점마다 포인트를 추가하고, 마지막으로 그 위에 값을 텍스트로 표시했다.

ggplot(rates3) +
  geom_line(aes(x = date, y = value, colour = rate_name), linewidth = 1) +
  geom_point(aes(date, value, colour = rate_name, shape = rate_name), size = 3) +
  geom_text(aes(date,value + 0.05, label = value), size = 5,
            family = v_font_bold2, colour = "gray30") +
  scale_shape_manual(values = c(15, 17)) 

그래프 합치기

plot_layout 메소드를 이용하면 하나로 손쉽게 합칠 수 있다. 그래프간 구성비를 조정하는 부분이 중요한데, design 파라메터를 이용하면 된다. 만약 그래프 3개를 가지고 구성한다고 하면 더하는 순서별로 A~Z 까지 별칭이 매핑된다고 생각하면 된다. 나는 6X6 구성을 예상하고 A와 B그래프는 3X3 으로, 마지막 3번째인 C그래프틑 3X6 사이즈로 구성하였다. 결과는 아래 그래프와 같다.

d = "
AAABBB
AAABBB
AAABBB
CCCCCC
CCCCCC
CCCCCC
"

g1 + g2 + g3 +
  patchwork::plot_layout(design = d)


더 보면 좋을 글들