13.9 히트맵
x축과 y축으로 나타낸 그래프 혹은 2차원의 지도 위에 특정 연속형 변수의 값에 따라 색깔을 조금씩 다르게 하여 정보를 보여주는 시각화 방법으로 히트맵(Heat map)이 많이 사용됩니다.
R ggplot2
패키지에서는 **geom_tile()
, geom_raster()
함수를 사용해서 쉽고 편하게 히트맵(Heat map)**을 그릴 수 있습니다.
이번 절에서는 히트맵(Heat map)을 그리고, 축의 항목 위치를 바꾸어 보는 것을 예를 들어보이겠습니다.
아래 보시는 것은 구글에 히트맵(Heat map) 이라는 키워드로 나온 이미지들인데요, 평소에 알게 모르게 히트맵을 우리가 많이 접하고 있었다는 것을 알 수 있을 것입니다.
13.9.2 데이터 세트
MASS
패키지에 내장되어 있는 Cars93
데이터 프레임이며, 차종(Type)
, 실린더(Cylinders)
별 고속도로연비(MPG.highway)
를 사용하여 히트맵(Heat map)을 그려보겠습니다.
library(MASS)
str(Cars93)
13.9.3 히트맵 그리기
ggplot2
는 별도의 설치 및 호출이 필요하므로 아래의 절차를 먼저 거치고 히트맵을 그려보겠습니다.
13.9.3.1 패키지 설치
library(ggplot2)
13.9.3.2 히트맵 그리기
x축에 차종(Type)
, y축에 실린더개수(Cylinders)
별로 고속도로연비(MPG.highway)
에 따라서 색을 달리하여 히트맵을 geom_tile()
함수를 사용해 그려보겠습니다.
# Type, Cylinders 별 MPG.highway Heatmap : geom_tile()
<- ggplot(Cars93, aes(x=Type, y=Cylinders, fill=MPG.highway)) +
a1 geom_tile()
a1
13.9.3.3 차의 크기를 고려한 히트맵
위의 히트맵을 보면 x축에 차종(Type)
이 차의 크기 순서가 아니라 알파벳 순서로 되어 있다보니 색깔이 경향성이 없이 무작위하게 채워져있어 보입니다. x축을 차의 크기를 감안한 순서대로, 즉, “Small
,” “Compact
,” “Midsize
,” “Sporty
,” “Large
,” “Van
” 의 순서대로 scale_x_discrete(limits=...)
를 사용해 바꾸어보겠습니다.
# x축 순서 바꾸기 : scale_x_discrete(limits=...)
<- a1 +
a2 scale_x_discrete(limits=c("Small", "Compact", "Midsize", "Sporty", "Large", "Van"))
a2
위의 히트맵을 보니 크기가 작을 수록, 실린더 개수가 작을 수록 고속도로 연비가 높으며, 그 반대는 고속도로 연비가 낮아짐을 한눈에 단박에 파악할 수 있게 되었습니다.
13.9.3.4 geom_raster()
함수를 이용한 히트맵
이번에는 geom_raster()
함수를 사용해 히트맵을 그려보겠습니다. 결과적으로 geom_tile()
과 차이가 거의 없다는 것을 알 수 있습니다.
# Type, Cylinders 별 MPG.highway Heatmap : geom_raster()
ggplot(Cars93, aes(x=Type, y=Cylinders, fill=MPG.highway)) +
geom_raster() +
scale_x_discrete(limits=c("Small", "Compact", "Midsize", "Sporty", "Large", "Van"))
13.9.3.5 연속형 숫자 데이터의 히트맵
연속형 숫자형 값을 가지는 히트맵의 색상을 scale_fill_gradient(low = "colour 1", high = "colour 2")
옵션을 사용해서 다르게 설정해보도록 하겠습니다. (kusscd 님, 댓글로 방법 공유해주셔서 감사합니다 ^^)
ggplot(Cars93, aes(x=Type, y=Cylinders, fill=MPG.highway)) + # filling with numeric value
geom_tile() +
scale_x_discrete(limits = c("Small", "Compact", "Midsize",
"Sporty", "Large", "Van")) +
scale_fill_gradient(low = "yellow", high = "red") +
ggtitle("Heatmap of MPG.highway by Type & Cylinders")
13.9.3.6 범주형 문자 데이터의 히트맵
다음으로, 범주형 자료로 히트맵의 색상을 채우는 경우에 scale_fill_manual(values = c("colour 1", "colour 2", ...)
을 옵션을 사용해서 색상을 사용자가 직접 지정해주는 방법을 2개 범주를 가지는 간단한 예시를 들어서 설명하겠습니다.
<- data.frame(XCoord = c(1, 1, 2, 3, 3, 4, 4, 5, 5, 5),
my.df YCoord = c(1, 4, 3, 1, 3, 1, 5, 2, 3, 5),
Seg = c("A", "A", "A", "A", "B", "A", "B", "B", "B", "B"))
ggplot(my.df, aes(x=XCoord, y=YCoord, fill=Seg)) + # filling with categorical value
geom_tile(colour="white") +
scale_fill_manual(values = c("blue", "red")) +
ggtitle("Heatmap with 2 categories with scale_fill_manual()")