막대그래프에 레이블 추가 및 연결선 만들기

R프로그래밍으로 막대그래프를 그리면서, 선을 이용하여 연결선을 이어 데이터를 강조하고 싶을 때, ggrepel 패키지를 사용하고 있다. 그냥 직선으로 할 수도 있지만, 아래 그림처럼 약간 꺾은선으로 이어서할 수도 있다. 기능을 하나씩 추가하면서 살펴보려 한다.

1단계: 데이터 생성

우선, 그래프를 만들 데이터를 생성한다.

library(tibble)

data <- tibble(x = 1:2, y = c(5, 12), la = c('class A', 'class B'))
print(data)

이 코드를 실행하면 아래와 같은 데이터프레임이 생성된다.

# A tibble: 2 × 3
      x     y la     
  <int> <dbl> <chr>  
1     1     5 class A
2     2    12 class B

2단계: 기본 막대 그래프 그리기

이제 ggplot2 패키지를 사용하여 기본 막대 그래프를 그린다.

library(ggplot2)

ggplot(data) +
  geom_col(aes(x = x, y = y))

3단계: 막대에 색상 추가

각 막대를 서로 다른 색상으로 표현하려면, fill 옵션만 추가하면 된다.

ggplot(data) +
  geom_col(aes(x = x, y = y, fill = la)) +
  theme(legend.position = "none")

4단계: 텍스트 레이블 추가

geom_text_repel 함수를 사용하여, 각 막대 위에 텍스트 레이블을 추가한다. 텍스트 레이블이 각 막대 위에 표시되며, nudge_x, nudge_y 를 이용하여 막대에서 약간 떨어진 위치에 레이블을 배치했다.

library(ggrepel)

ggplot(data) +
  geom_col(aes(x = x, y = y, fill = la)) +
  geom_text_repel(aes(x = x, y = y, label = la),
                  nudge_x = c(-1, 1), nudge_y = c(3,3)) +
  theme(legend.position = "none")

마지막으로 연결선 커브를 최대한 직선으로 꺾도록 segment.curvature 을 0에 가깝게 셋팅한다. 음수와 양수에 따라 방향이 달라지며, 대입해보며 실행하면 쉽게 이해할 수 있을 것이다.

ggplot(data) +
  geom_col(aes(x = x, y = y, fill = la)) +
  geom_text_repel(aes(x = x, y = y, label = la),
                  nudge_x = c(-1, 1), nudge_y = c(3,3),
                  segment.curvature = c(-1e-20, 1e-20)) +
  theme(legend.position = "none")


더 보면 좋을 글들