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와 기타 다른 패키지들을 이용해서 시각화를 시도하고, 발생하는 문제의 원인을 파악해서 해결하는 과정을 보여드리게 될 것 같습니다.