FlowingData 블로그의 게시물 은 R 기본 그래픽을 사용하여 아래에서 히트 맵을 빠르게 만드는 방법을 알려 주고있습니다..
이 게시물은 ggplot2를 사용하여 매우 유사한 결과를 얻는 방법을 보여줍니다.

데이터 가져오기
FlowingData는 databasebasketball.com에서 제공한 지난 시즌의 NBA 농구 통계를 사용했으며 데이터가 포함 된 csv 파일은 해당 웹 사이트에서 직접 다운로드 할 수 있습니다.
|
> nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv") |
|
플레이어는 점수가 매겨진 점수에 따라 순서가 정해지고 Name 변수는 점수의 적절한 정렬을 보장하는 요소로 변환됩니다.
|
> nba$Name <- with(nba, reorder(Name, PTS)) |
|
FlowingData는 플롯 된 값을 매트릭스 형식으로해야하는 stats-package에서 heatmap 함수를 사용하지만, ggplot2는 데이터 프레임과 함께 작동합니다. 처리가 쉽도록 데이터 프레임이 와이드 형식에서 긴 형식으로 변환됩니다.
게임 통계에는 매우 다른 범위가 있으므로 비교할 수 있도록 모든 개별 통계가 재조정됩니다.
|
> nba.m <- melt(nba) > nba.m <- ddply(nba.m, .(variable), transform, + rescale = rescale(value)) |
|
플로팅
ggplot2에는 특정 히트맵 플로팅 기능이 없지만 geom_tile과 부드러운 그라데이션 채우기를 결합하면 작업이 잘 수행됩니다.
|
> (p <- ggplot(nba.m, aes(variable, Name)) + geom_tile(aes(fill = rescale), + colour = "white") + scale_fill_gradient(low = "white", + high = "steelblue")) |
|
포맷팅에 몇 가지 마무리가 적용되며 히트맵 도면이 표시 될 준비가되었습니다.
|
> base_size <- 9 > p + theme_grey(base_size = base_size) + labs(x = "", + y = "") + scale_x_discrete(expand = c(0, 0)) + + scale_y_discrete(expand = c(0, 0)) + opts(legend.position = "none", + axis.ticks = theme_blank(), axis.text.x = theme_text(size = base_size * + 0.8, angle = 330, hjust = 0, colour = "grey50")) |
|
재조정 업데이트
위의 그림에 대한 데이터를 준비 할 때 모든 변수는 0과 1 사이의 값이되도록 재조정되었습니다.
Jim은 heatmap-function이 다른 크기 조정 방법을 사용한다는 점을 주석에서 지적했습니다. (그리고 처음에는 얻지 못했습니다.) 따라서 그 그림은 동일하지 않습니다. 아래는 히트 맵의 업데이트 된 버전으로 원본과 훨씬 비슷하게 보입니다.
|
> nba.s <- ddply(nba.m, .(variable), transform, + rescale = scale(value)) |
|
소스: ggplot2: Quick Heatmap Plotting | Learning R
(Visited 466 times, 7 visits today)
조회수 :
943
관련