ggplot2로 막대그래프를 그렸는데 데이터가 양수와 음수로 구분이 되는 경우 그래프의 가독성을 높이기 위해서 양수냐, 음수냐에 따라 색상을 다르게 하고 싶을 때가 있습니다.
이번 포스팅에서는 R에 내장되어 있는 airquaility 데이터셋 (뉴욕의 1973년 5월~9월까지의 daily air quality measurements) 에서 5월달 온도(Temp) 만을 가져온 후에, 5월달 daily 온도의 1차 차분 데이터를 만들어서 막대그래프를 그려보도록 하겠습니다.
> > # 5월 온도만 선택 > May <- subset(airquality, select = c(Month, Day, Temp), subset = (Month == "5"))
|
온도의 1차 차분은 diff(변수, lag=차수) 함수를 사용합니다. 아래는 1차 차분을 하였으므로 5월1일은 빼고, 5월2일부터 5월31일까지의 날짜만 가져온 후에, 날짜와 온도 1차 차분한 값을 data frame으로 묶었습니다. 그 후에 ifelse() 함수를 사용해서 온도 1차 차분 값이 0 이상이면 "PLUS", 0 미만이면 "MINUS"라는 구분자 변수를 새로 생성하였습니다.
> # 온도의 1차 차분 > May_Temp_Diff <- diff(May$Temp, lag=1) > May_Temp_Diff [1] 5 2 -12 -6 10 -1 -6 2 8 5 -5 -3 2 -10 6 2 -9 11 -6 -3 14 -12 0 -4 1 -1 10 14 -2 [30] -3 |
ggplot2 패키지는 사용자가 추가로 설치해야 합니다. intall.packages()함수로 설치하고 library() 함수로 호출해보겠습니다.
> install.packages("ggplot2") > library(ggplot2) |
이제 준비가 다 되었습니다. 1차 차분한 5월달의 온도에 대해서 양수(전날 보다 온도 상승)는 빨간색, 음수(전날보다 온도 하락)는 파란색으로 막대 그래프를 그려보겠습니다. aes(fill=구분자 변수) 함수를 사용하고, 색깔지정은 scale_fill_manual(values=c(색깔1, 색깔2)) 로 지정해주면 됩니다.
> # 양수는 빨간색, 음수는 파란색으로 막대 색 구분 > ggplot(data=May_Temp_Diff.df, aes(x=May_Day, y=May_Temp_Diff, fill=plus_minus)) + + geom_bar(stat="identity", position="identity", colour="white", width=0.2) + # width 막대 폭 좁게 + scale_fill_manual(values=c("blue", "red"), guide=FALSE) + # guide=F 범례 생략 + ggtitle("1st order differenced Temp of May")
|
막대 폭이 너무 가늘어서 보기 싫다면, 막대 폭을 좀더 넓히고 싶다면 geom_bar(width=숫자) 함수를 사용하면 됩니다.
> # width 막대 폭 넓게 > ggplot(data=May_Temp_Diff.df, aes(x=May_Day, y=May_Temp_Diff, fill=plus_minus)) + + geom_bar(stat="identity", position="identity", colour="white", width=1) + # width 막대 폭 넓게 + scale_fill_manual(values=c("blue", "red"), guide=FALSE) + # guide=F 범례 생략 + ggtitle("1st order differenced Temp of May")
|
다음으로, 위의 그래프에서 보면 ggplot2 가 알아서 x축을 10, 20, 30으로 해서 10일 간격으로 설정해서 그래프를 그렸는데요, 이를 좀더 세분화하고 싶다면 scale_x_continuous(breaks=c(숫자, 숫자...)) 로 지정해주면 됩니다.
> # x축 세분화 > ggplot(data=May_Temp_Diff.df, aes(x=May_Day, y=May_Temp_Diff, fill=plus_minus)) + + geom_bar(stat="identity", position="identity", colour="white", width=0.5) + + scale_fill_manual(values=c("blue", "red"), guide=FALSE) + + ggtitle("1st order differenced Temp of May") + + scale_x_continuous(breaks=c(5, 10, 15, 20, 25, 30)) # x축 세분화
|
마지막으로, x축과 y축의 라벨 이름이 위에 보면 변수명이 그래도 들어가 있는데요, 좀더 이해하기 쉽도록 xlab(), ylab() 함수를 추가하여 x축, y축 라벨을 변경해보도록 하겠습니다.
> # modification of x label, y label > ggplot(data=May_Temp_Diff.df, aes(x=May_Day, y=May_Temp_Diff, fill=plus_minus)) + + geom_bar(stat="identity", position="identity", colour="white", width=0.5) + + scale_fill_manual(values=c("blue", "red"), guide=FALSE) + + ggtitle("1st order differenced Temp of May") + + scale_x_continuous(breaks=c(5, 10, 15, 20, 25, 30)) + + xlab("Day of May, 1973") + + ylab("Temp difference from previous day")
|
많은 도움 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 그래프_시각화' 카테고리의 다른 글
R Graphics 패키지 pairs() 함수를 사용한 산점도 행렬 그리기 (0) | 2015.09.01 |
---|---|
R corrplot 상관계수 행렬 Plot (correlation matrix plot) (7) | 2015.09.01 |
R ggplot2 누적 영역 그래프 (Stacked Area Plot) (geom_area()) (0) | 2015.08.23 |
R ggplot2 클리브랜드 점 그래프(Cleveland dot plot) (geom_point()) (4) | 2015.08.23 |
R ggplot2 이차원 밀도 그래프(2D Density Plot) (stat_density2d()) (0) | 2015.08.23 |