R프로그램으로 버블차트 그리기

버블차트(Bubble Chart)는 데이터 시각화의 한 형태로, 세 가지 변수의 관계를 동시에 표현할 수 있는 그래프이다. 일반적인 X,Y좌표만을 이용한 스캐터 플롯(scatter plot)과 유사하지만, 추가로 각 데이터 포인트의 크기를 나타내기 위해 원(bubble)의 크기를 사용한다. 그래서 버블 차트는 특히 다차원 데이터를 시각화할 때 유용하다.

shape 패턴별 셋팅방법

버블차트는 ggplot2 패키지의 geom_point 함수를 이용하여 그리면 된다. shape 옵션을 이용하여 (x,y) 좌표에 패턴을 지정할 수 있고, 원형모양은 대표적으로 1, 16, 21 을 사용할 수 있다. 각각 쓰임새가 다르다. shape 패턴은 아래 포스팅에서 정리한적이 있으니 참고한다.

geom_point shape 설정하기

shape=1은 테두리만 있고 내부가 비어 있는 원형이고, shape=16 은 내부가 채워진 원형이고, shape=21fill 옵션을 사용하여 내부의 색상을 별도로 변경할 수 있다.

shape=1 인 경우, 모양은 원형이지만 내부는 비어있는 패턴이다. 추가로 셋팅한 건 point의 크기는 30, 색상은 파란색, 테두리 두께는 3으로 설정했다. 그리고 geom_point 함수의 특징이 size 를 지정하면 자동으로 x,y축의 범위가 들쑥날쑥하게 변하기 때문에 정확한 크기를 지정하기 어려워, x축과 y축의 범위는 각각 0에서 2로 제한했다.

tb1 = tibble(x = 1, y = 1)

ggplot(tb1) +
  geom_point(aes(x,y), size = 30, 
             colour = "blue", 
             shape = 1, stroke = 3) +
  scale_x_continuous(limits = c(0,2)) +
  scale_y_continuous(limits = c(0,2))

shape=16 인 경우, 모양은 원형이면서, 내부도 꽉차있는 패턴이다. colour 옵션으로만 색상을 지정할 수 있다. 나머지 옵션은 위의 그래프와 동일하다.

ggplot(tb1) +
  geom_point(aes(x,y), size = 30, 
             colour = "blue",
             shape = 16, stroke = 3) +
  scale_x_continuous(limits = c(0,2)) +
  scale_y_continuous(limits = c(0,2))

shape=21 인 경우, 원의 테두리 색과 내부색상을 나누어 셋팅할 수 있다. 테두리 색상은 파란색, 내부 색상은 하늘색으로 설정했다. 테두리 색상에도 뭔가 값을 매핑하여 시각화 가능하긴 하지만, 그런 경우보다는 그래프 디자인을 표현할 때 사용될 듯 하다.

ggplot(tb1) +
  geom_point(aes(x,y), size = 30, 
             colour = "blue", fill = "skyblue",
             shape = 21, stroke = 3) +
  scale_x_continuous(limits = c(0,2)) +
  scale_y_continuous(limits = c(0,2))

마지막으로 무작위 데이터를 가지고 버블차트를 하나 만들어봤다. point의 크기(size)는 데이터 s에 매핑하고, 색상도 s를 기반으로 지정했다. 투명도(alpha)는 0.6으로 설정해서 겹쳐져 가려질만한 부분이 없도록 셋팅했다. 색상테마는 Viridis 색상 팔레트를 사용했고, 크기 척도는 10에서 30까지 설정하였다. scale_size_continuous 로 크기 범위를 지정하지 않으면 너무 작게 표시되다보니, 범위를 입력해가면서 적당한 크기를 찾아야 한다.

ggplot 그래프에 색상 적용법(viridis, brewer scales)

ggplot(tibble(x = sample(1:20,20), y = sample(1:20,20), s = sample(1:50, 20))) +
  geom_point(aes(x,y, size = s, colour = s), 
             alpha = 0.6, shape = 16) +
  scale_colour_viridis_c(option = "D", begin = 0.3, end = 1) +
  scale_size_continuous(range = c(10, 30)) +
  scale_x_continuous(limits = c(0,20)) +
  scale_y_continuous(limits = c(0,20))


더 보면 좋을 글들