버블차트(Bubble Chart)는 데이터 시각화의 한 형태로, 세 가지 변수의 관계를 동시에 표현할 수 있는 그래프이다. 일반적인 X,Y좌표만을 이용한 스캐터 플롯(scatter plot)과 유사하지만, 추가로 각 데이터 포인트의 크기를 나타내기 위해 원(bubble)의 크기를 사용한다. 그래서 버블 차트는 특히 다차원 데이터를 시각화할 때 유용하다.
shape 패턴별 셋팅방법
버블차트는 ggplot2
패키지의 geom_point
함수를 이용하여 그리면 된다. shape
옵션을 이용하여 (x,y)
좌표에 패턴을 지정할 수 있고, 원형모양은 대표적으로 1, 16, 21 을 사용할 수 있다. 각각 쓰임새가 다르다. shape 패턴은 아래 포스팅에서 정리한적이 있으니 참고한다.
shape=1
은 테두리만 있고 내부가 비어 있는 원형이고, shape=16
은 내부가 채워진 원형이고, shape=21
은 fill
옵션을 사용하여 내부의 색상을 별도로 변경할 수 있다.
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(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))