[R 시각화] reorder 함수(function) 활용해서 ggplot2 그래프 정렬하기
R reorder 함수 활용해서 ggplot2 막대그래프 정렬하기
ggplot2 패키지를 활용해서 barplot을 그리는데 값에 따라 정렬을 하려면 어떻게 해야 하는지 찾아보다가 reorder 함수를 활용해서 정렬하는 방법을 찾게 되었습니다. 한국어로 된 설명이 없고 알아두면 꽤 유용하게 쓰일 함수인 것 같아서 공유하고자 합니다.
1. 데이터 : 지하철 승하차 데이터
공공데이터포털에서 2018년 1월 지하철 승하차 데이터를 다운로드해서 활용하겠습니다.
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Dataset)와 Open API로 제공하는 사이트입니다.
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
2. R 코드
ggplot2 패키지를 설치하고 불러온 후 데이터도 같이 불러올게요. 데이터를 불러왔다면 생김새도 같이 확인해주세요.
## 1. ggplot2 package 설치
install.packages("ggplot2")
library(ggplot2)
## 2. 데이터 불러오기
setwd("C:/data")
subway <- read.csv("2018년 1월 지하철 승하차인원 데이터.csv")
# 데이터 생김새 확인하기 위한 필수 함수 5개
head(subway)
tail(subway)
nrow(subway)
str(subway)
summary(subway)
서울 지하철 1호선~9호선까지만 데이터를 추출(subset) 해서 호선별 승차인원수를 가지고 막대그래프(barplot)를 그려보겠습니다.
# 데이터 추출하기(1호선~9호선)
sw <- subset(subway, 노선명 %in% c("1호선","2호선","3호선",
"4호선","5호선","6호선",
"7호선","8호선","9호선"))
ggplot2 패키지를 활용해서 막대그래프(barplot)를 그리는 코드입니다.
aes(x=) 자리에는 범주형 데이터가 와야 하고 weight= 부분에는 연속형 데이터를 넣어줘야 막대그래프를 그릴 수 있습니다.
# 막대그래프 그리기(geom_bar)
b <- ggplot(data=sw, aes(x=노선명, weight=승차총승객수))
b + geom_bar()
막대그래프를 그렸는데 정렬이 노선명으로 되어 있습니다. 1호선~9호선 순이죠. 이렇게 나타내는 것도 한가지 방법이 될 수 있습니다. 내가 호선별로 막대의 크기를 비교하고 싶으니까요. 그런데 가장 승차인원수가 많은 호선을 맨 앞으로 혹은 맨 뒤로 보내서 막대그래프를 그리고 싶다면, 즉 승차인원수에 따라 정렬을 하고 싶다면 어떻게 해야 할까요????

R reorder 함수를 사용하시면 됩니다.
reorder 함수를 활용해보겠습니다. 함수에 필요한 인자들은 다음과 같습니다.
reorder(정렬하고 싶은 변수, 연속형 데이터, function) 여기서 '정렬하고 싶은 변수'는 factor 형태이어야 합니다. 주의!
# reorder 함수를 활용해서 막대 정렬하기
b2 <- ggplot(data=sw, aes(reorder(노선명, -승차총승객수, sum), 승차총승객수))
b2 + geom_col()
b3 <- ggplot(data=sw, aes(reorder(노선명, 승차총승객수, sum), 승차총승객수))
b3 + geom_col()
geom_bar() 함수를 쓰지 않고 geom_col()을 사용했습니다. geom_bar() 함수를 쓰면 에러가 나오더군요ㅠ


reorder(노선명, 승차총승객수, sum) 과 reorder(노선명, -승차총승객수, sum)의 결과를 비교해 보시고 차이점을 보시기 바랍니다.
reorder 함수는 내가 정렬하고 싶은 factor를 연속형 데이터의 합, 평균 등 산술 통계 function에 따라 정렬을 시켜주는 함수입니다.
막대그래프(barplot) 내에서 정렬을 할 수는 없는 것 같고요.
데이터를 정렬 시켜놓고 막대그래프(barplot)을 그리면 쉽게 정렬된 막대그래프를 그릴 수 있습니다.
reorder 함수를 활용해서 ggplot2 막대그래프 그릴 때 정렬하는 방법을 알아보았습니다.
감사합니다.