ggplot2 - 03

by Minho Lee — on  ,  ,  , 

cover-image

ggplot2

지난번 포스팅까지 해서 ggplot2의 그래프를 그리는 방법에 대해서는 전반적으로 살펴보았습니다.

이번 글에서는 필수적이지는 않지만 도움이 될 만한 내용들을 몇 가지 설명하려고 합니다.




stat이 생성하는 값들

stat은 주어진 데이터프레임 이외에, 그래프를 그리는데 필요한 값을 추가로 생성해서 데이터프레임에 추가합니다.

주어진 값을 그대로 사용한다는 stat_identity()를 제외하면 나머지 stat 함수들은 제각기 다른 값을 생성하는데 필요하다면 여기서 생성된 값을 가져다가 에스테틱에 적용할 수 있습니다.

이 때, 기존 데이터의 변수들과 구별하기 위해 변수 이름 앞뒤로 ..을 붙입니다.

..count.., ..density..와 같은 형태로 에스테틱에 적용할 수 있습니다.

각 stat 함수가 어떤 값을 생성하는지는 http://docs.ggplot2.org/current/의 문서에서 확인할 수 있습니다.



예를 들면, stat_bin의 경우 다음과 같은 값을 추가로 생성합니다

문서는 이 곳에서 확인할 수 있습니다.

count : 각 구간(bin)에 속한 항목의 개수

density : 각 구간(bin)의 밀도(전체의 합이 1)

ncount : count와 비슷합니다, 가장 큰 count 값을 1로 두고 다른 값들을 조정합니다

ndensity : density, 가장 높은 density 값이 1이 됩니다

library(ggplot2)
iris_sl = ggplot(data = iris['Sepal.Length'], aes(x=Sepal.Length))
iris_sl + geom_bar()
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

iris_sl + geom_bar(aes(y=..count..))
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

iris_sl + geom_bar(aes(y=..density..))
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

iris_sl + geom_bar(aes(y=..ncount..))
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

iris_sl + geom_bar(aes(y=..ndensity..))
## stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.




R에서 기본적으로 제공하는 volcano 데이터를 그래프로 그려보려고 합니다.

reshape2 패키지의 melt함수를 이용해서 데이터프레임으로 변형시키고 ggplot2로 그래프를 그립니다.

volcano_df = reshape2::melt(volcano)
volcano_gg = ggplot(volcano_df, aes(x=Var1, y=Var2, z = value))

stat_contour가 생성하는 level 변수를 사용해서 그래프의 에스테틱에 반영시킬 수 있습니다.

volcano_gg + stat_contour()

volcano_gg + stat_contour(aes(colour = ..level..))

volcano_gg + stat_contour(geom = 'polygon', aes(fill = ..level..))




테마

축의 모양이나 배경색 등 그래프의 세부적인 요소들을 조절해서 테마로 저장할 수 있습니다.

기본적으로 ggplot2에서 제공하는 테마들도 있고 패키지로 배포되는 테마들도 있습니다.

dia_bar <- ggplot(diamonds, aes(x=cut, fill = cut)) + geom_bar()

dia_bar + theme_gray()

dia_bar + theme_bw()

dia_bar + theme_classic()



ggthemes패키지를 설치하면 추가적인 ggplot2 테마를 적용할 수 있습니다.

#install.packages('ggthemes')
library(ggthemes)

dia_bar + theme_economist() + scale_colour_economist()

dia_bar + theme_excel()

dia_bar + theme_solarized()





세 번에 걸쳐 ggplot2를 사용하는 방법을 설명하면서 ggplot2의 다양한 기능과 적용 방법에 대해 알아보았습니다. 기본적인 사용 방법을 익힌 후에 실제 데이터를 가지고 직접 데이터를 그려보면 생각했던 것 보다 원하는 그래프를 얻는 것이 힘들다는 것을 알게 됩니다. 하지만 ggplot2에 어느 정도의 데이터 정제 능력이 뒷받침된다면 많은 문제들을 해결해 가면서 원하는 시각화를 구현할 수 있을 거라고 생각합니다. 이후의 ggplot2 관련 글들은 ggplot2와 기타 다른 패키지들을 이용해서 시각화를 시도하고, 발생하는 문제의 원인을 파악해서 해결하는 과정을 보여드리게 될 것 같습니다.


이전글 - ggplot2 02 - drawing graphs

Comments