데이터 시각화
[R] 랭킹 차트 효율적으로 표현하기(1)
hyeppyy
2023. 6. 18. 21:17
서울 내 가장 비싼 가격에 거래된 아파트는 어디일까?
2022년도 데이터를 기준으로 가장 비싼 아파트가 어디인지 표현해보고자 한다.
우선 필요한 데이터를 불러온 후, 시군구/아파트별 평균 거래 금액을 계산한다.
평균 거래 금액 기준으로 내림차순 하여, 랭킹 변수를 추가한다.
library(readr)
seoul_price <- read_csv("~/seoul_price.csv") %>% data.table()
max_price_tb <- seoul_price[substr(deal_ymd,1,4)=="2022"][,mean(거래금액),.(gugun,아파트)]
#랭킹 추가
setorder(max_price_tb,-V1)
max_price_tb[,ranking:=1:.N]
데이터 결과를 확인한다.
1. 막대 차트로 표현해보기 (기본)
가장 기본은 막대 차트로 표현하는 것이다.
max_price_tb[ranking<=10] %>%
ggplot(aes(아파트,V1)) + geom_bar(stat="identity") +
labs(x="아파트",y="평균거래가격")
랭킹 순서대로 그려야 순위가 잘 보이겠다.
reorder를 사용하여 x축의 순서를 변경해준다.
max_price_tb[ranking<=10] %>%
ggplot(aes(reorder(아파트,-V1),V1)) + geom_bar(stat="identity") +
labs(x="아파트",y="평균거래가격")
순위를 표현할 때에는 가로, 세로 값을 변경하여 내림차순으로 정렬하는 것이 가독성이 좋다.
coord_flip() 을 활용하여 x축과 y축을 변경한다.
max_price_tb[ranking<=20] %>%
ggplot(aes(reorder(아파트,V1),V1)) + geom_bar(stat="identity") +
labs(x="아파트",y="평균거래가격") + coord_flip()
2. 특정 항목을 강조해주고 싶을 때
특정 항목을 강조하고 싶다면 색상을 다르게 표현한다.
20위 내에 용산구에 위치한 아파트만 강조해보자.
그리고 좀 더 깔끔한 표현을 위해 배경도 없애보자.
max_price_tb[ranking<=20] %>%
ggplot(aes(reorder(아파트,V1),V1)) +
geom_bar(stat="identity",fill=ifelse(max_price_tb[ranking<=20]$gugun %in% c('용산구'),"#b3001b","#262626")) +
labs(x="아파트",y="평균거래가격") + coord_flip() +
theme(
# panel (그래프의 배경)
panel.background = element_rect(fill = NA), #간격 없애기
panel.grid.major.x = element_line(color = "#EAEDF0"), #색 지정 및 보조선 그리기
# 축
axis.ticks = element_blank(), #ticks 삭제
)
3. 버블차트로 표현해보기
막대차트가 아닌 버블차트로도 표현할 수 있다.
max_price_tb[ranking<=20] %>%
ggplot(aes(reorder(아파트,V1),V1/10000)) +
geom_point(size=6,color=ifelse(max_price_tb[ranking<=20]$gugun %in% c('용산구'),"#b3001b","#262626")) +
geom_segment(aes(y = 0,
x = `아파트`,
yend = V1/10000,
xend = `아파트`)
,color=ifelse(max_price_tb[ranking<=20]$gugun %in% c('용산구'),"#b3001b","#262626")) +
coord_flip() +
geom_text(color="white", size=2.5,aes(label=round(V1/10000))) +
labs(x="아파트",y="평균거래가격(억)") +
theme(
# panel (그래프의 배경)
panel.background = element_rect(fill = NA), #간격 없애기
panel.grid.major.x = element_line(color = "#EAEDF0"), #색 지정 및 보조선 그리기
# 축
axis.ticks = element_blank(), #ticks 삭제
)