728x90
반응형
1. 개요
바 그래프 (bar graph)는 범주형 데이터를 x축 또는 y축에 둔 후에 값의 크기를 나머지 다른 축에 그리는 그래프이다. 그런데, 바 그래프의 범주형 데이터가 클러스터링이 되는 경우 단순히 범주형 데이터 이름을 나열하는 것보다는 각 범주 간의 유사도를 보여주는 것이 보다 좋은 표현법이다.
본 글에서는 ggplot2를 활용해서 해당 그래프를 그리는 법을 다루고자 한다.
2. 코드
# 바그래프와 덴드로그램이 합쳐진 플랏
# 라이브러리 셋팅
library(ggh4x) # ggplot2의 그림을 그릴 때 포맷팅을 도와주는 라이브러리
library('ggdendro') # 덴드로그램을 그리기 위한 라이브러리
library(ggplot2) # 바그래프를 그리기 위한 ggplot2 라이브러리
# 데이터 준비
# 아래 데이터는 어디까지나 예시이다.
df=head(USArrests,20) # 각 도시 별 범죄율이 정리된 데이터셋
df$city=rownames(df)
df2=tidyr::gather(data=df,key='type',value='rate',-city)
hc=hclust(dist(t))
# 바그래프를 그리는 단계
g=ggplot2::ggplot(df2,aes(x=factor(city,level=rownames(df)),y=rate,fill=type))+
ggplot2::geom_bar(stat="identity",width=1,position=position_stack(reverse=F))
# 바그래프 안에 값이 얼마나 되는지 표기하는 단계
g=g+ggplot2::geom_text(aes(label=round(rate)),position=position_stack(vjust=.5,reverse=F),size=3)
# x축에 덴드로그램을 그리는 단계
g=g+ggh4x::scale_x_dendrogram(hclust=hc)
# 범주형 데이터의 y축 값의 위치를 조정
# expand에 들어가는 것은 각 데이터의 포지션에 얼만큼의 패딩 (여유공간)을 줄지를 의미함.
# 0,0의 의미는 아래와 위에 모두 패딩을 주지 않겠다는 의미임.
# 안 넣어도 큰 문제는 없을 수도 있으나 넣는 것이 바그래프와 덴드로그램이 가까이 붙게 만들어서
# 보기 좋음.
# scale_y_continuous는 bargraph의 여백을 얼만큼 줄지를 의미하는데 아래에서는
# 밑에는 여백을 두지 말고 위쪽으로는 10만큼의 값을 여백으로 두게 설정함.
g=g+ggplot2::scale_y_continuous(expand=expansion(mult=0,add=c(0,10)))
# 바그래프의 레전드 위치 조정, 불필요한 라벨 제거 및 글자방향 조절
# theme은 현재 그림에서 테마를 어떻게 가져갈지를 조정하는 기능임.
g=g+ggplot2::theme(
axis.text=element_text(color="black",size=11), # 라벨의 크기를 어떻게할지
axis.text.x=element_text(angle=90,hjust=1,vjust=.5), # x축 라벨의 각도와 위치 조정
axis.text.y=element_blank(), # y축 라벨의 값을 제거할지
axis.ticks=element_blank(),
axis.ticks.length=unit(14,"pt"), # height of dendrogram
axis.title=element_blank(),
legend.justification=c(0,1),
legend.key=element_rect(fill=NA), # remove gray border around color squares
legend.margin=margin(-6,0,0,0),
legend.position=c(0,1),
legend.position=c(0.01,0.99),
legend.title=element_blank(),
panel.background=element_rect(fill="white",color='black',linewidth=1),
plot.margin=margin(5,0,5,5)
)
728x90
반응형
'R관련' 카테고리의 다른 글
R4.x 도커 파일 (dockerfile for R 4.x) (0) | 2024.01.18 |
---|---|
[conda] R 4.2.0설치하기 (0) | 2023.02.09 |
DESEQ2 (0) | 2020.12.22 |
sig_barplot (0) | 2020.02.06 |
CMScaller (0) | 2019.09.03 |