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