Must Learning With Statistics

8. R 데이터 시각화 본문

MustLearning with R 1편

8. R 데이터 시각화

Doublek Park 2020. 1. 29. 20:44

Chapter8. R 데이터 시각화

R에는 ggplot2라는 강력한 시각화 패키지가 있으며, 요즘 여러 해외 저널에서는 ggplot2를 이용한 그래프를 시각화 도구로 많이 사용하고 있습니다. 이번 챕터에서는 이 ggplot2를 이용하여 데이터를 효과적으로 시각화하는 방법에 다루고자 합니다.

1. ggplot2 테마 수정

ggplot2()는 기본적으로 회색 바탕에 흰색 격자선이 기본 배경입니다. 하지만, 이를 싫어하는 분들도 분명 계실 것입니다. 이런 경우에는 테마를 변경하여 그래프를 그리면 원하시는 스타일로 그릴 수가 있습니다. 테마의 종류는 다음과 같습니다.

library(ggplot2)
library(ggthemes)

HR = read.csv('F:/Dropbox/DATA SET/HR_comma_sep.csv') 
HR$left = as.factor(HR$left)
HR$salary = factor(HR$salary,levels = c("low","medium","high"))

# Classic Theme
ggplot(HR,aes(x=salary)) +  
  geom_bar(aes(fill=salary)) +
  theme_classic()

# BW Theme

ggplot(HR,aes(x=salary)) +  
  geom_bar(aes(fill=salary)) +
  theme_bw()

)

제가 가장 많이 사용하는 테마 2개입니다. 하지만, 다른 다양한 테마도 여러가지가 있으니, 한번 보도록 하겠습니다. ggthemes패키지를 설치하면 더 많은 테마를 적용시킬 수가 있습니다.

Graph = ggplot(HR,aes(x=salary)) +  
  geom_bar(aes(fill=salary)) 

Graph + theme_bw() + ggtitle("Theme_bw") 
Graph + theme_classic() + ggtitle("Theme_classic") 
Graph + theme_dark() + ggtitle("Theme_dark") 
Graph + theme_light() + ggtitle("Theme_light")  

)))

Graph + theme_linedraw() + ggtitle("Theme_linedraw") 
Graph + theme_minimal() + ggtitle("Theme_minimal") 
Graph + theme_test() + ggtitle("Theme_test") 
Graph + theme_void() + ggtitle("Theme_vold") 

)))

2. 범례제목 수정

범례는 수정하기는 귀찮지만, 그래프를 처음보는 사람이 가장 먼저 확인하는 부분입니다. 그렇기에 신경을 좀 써줘야 할 필요가 있습니다. 범례를 수정하는 방법은 다음과 같습니다.

범례제목 수정

ggplot(HR,aes(x=salary)) +  
  geom_bar(aes(fill=salary)) +
  theme_bw() +
  labs(fill = "범례 제목 수정(fill)")

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(col = salary)) +
  theme_bw() +
  labs(col = "범례 제목 수정(col)")

)

먼저 범례 제목을 수정하기에 앞서 색을 지정하는 2가지 방법에 대해 이해를 하셔야합니다. 하나는 fill, 나머지 하나는 col입니다. fill은 말그대로 ‘색 채우기’ 개념으로 면적이 있는 도형의 색을 바꿀 때 사용하는 명령어입니다. 반대로 col은 색을 바꿔만 주는 것으로 점, 글씨, 선 등에 해당됩니다. 위 2그래프를 살펴보시면 하나는 fill이고, 나머지 하나는 col로 되어 있습니다. 한눈에 봐도 차이점을 확인할 수 있습니다. 범례 제목을 바꿔주는 것은 labs()를 이용하면 매우 간단하게 바꿀 수가 있습니다.

범례 위치 수정

범례 위치를 수정하는 방법은 theme()옵션에서 legend.positon을 통해 위치를 조정시켜줄 수가 있습니다.

Graph + theme(legend.position = "top")
Graph + theme(legend.position = "bottom")
Graph + theme(legend.position = c(0.9,0.7))
Graph + theme(legend.position = 'none')

)))

범례 테두리 설정

Graph + theme(legend.position = "bottom")


Graph + theme(legend.position = "bottom",
              legend.box.background = element_rect(),
              legend.box.margin = margin(1, 1, 1, 1))

)

범례 테두리를 설정하면 깔끔하게 범례를 정리할 수가 있습니다.

3. 축 변경

축 변경의 경우, 가장 먼저 신경써야 할 부분은 축에 설정된 변수가 Discrete인지 Continuous인지 확인부터 해야합니다. 제가 앞서 말했듯이 변수의 척도에 대한 이해는 분석뿐 아니라 시각화에서도 큰 부분을 차지하고 있습니다. 즉 사실상 분석 전체에 해당되는 경우인 것입니다. 먼저 정리하자면 다음과 같습니다.

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  scale_x_discrete(expand =  c(0,0), labels = c("하","중","상")) +
  scale_y_continuous(expand = c(0,0),breaks = seq(0,8000,by = 1000))

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  scale_x_discrete(expand =  c(0,0), labels = c("하","중","상")) +
  scale_y_continuous(expand = c(0,0),breaks = seq(0,8000,by = 1000)) +
  scale_fill_discrete(labels = c("하","중","상"))

)

위 그래프에서 x축은 이산형이기 때문에, scale_x_discrete를 활용하여 축 수정을 해주며, y축은 집계값을 나타내는 연속형 수치이기 때문에 scale_y_continuous를 활용하여 수정을 해주면 됩니다. 여기서 expand옵션은 그래프를 테두리에 맞추어 그리게 해주는 옵션입니다. 위에서 그렸던 그래프들을 살펴보면 조금씩 축(테두리)로부터 붕 떠있다는 점을 발견하실 수가 있습니다. 이 부분을 옵션으로 수정을 해주는 부분입니다. 또한 이산형(Discrete)에서는 labels옵션을 통해 축을 변경시켜줄 수 있으며, 연속형(Continuous)은 breaks를 통해 축을 변경시켜 줄 수가 있습니다. 범례에서의 표시는 labels를 바꾸어주는 방법은 scale_fill_discrete()를 활용하면 간단하게 바꿀 수가 있습니다. 만약 색이 col 옵션으로 구분이 되었다면, scale_color_discrete()를 통해 바꿔줄 수가 있습니다.

축범위 설정

축 범위 설정은 그래프를 표현할 범위를 나타낼 수가 있습니다.

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  ylim(0,5000)

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  ylim(0,13000)

)

y축에 ylim(0,5000)을 주면 y축 기준 0 ~ 5000까지만 나타내게 됩니다. low, medium은 5000보다 크기 때문에 그래프가 짤려서 나오지 않는 것을 확인할 수가 있습니다.

색 변경

R에서는 기본적으로 색 분류가 지정되어 있습니다. 하지만 가끔 색을 직접 변경을 해주고 싶은 경우가 존재합니다. Discrete 변수를 기준으로 색을 지정할 떄는 scale_fill_manual()혹은 scale_color_manual()을 활용하면 원하는 색 배치를 배정할 수 있습니다.

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  scale_fill_manual(values = c('red','royalblue','tan')) 


ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary), alpha = 0.4) +
  theme_bw() +
  scale_fill_manual(values = c('red','royalblue','tan')) 

)

scale_fill_manual에서 원하는 색상을 바꿔줄 수가 있습니다. alpha를 이용하면 색을 연하게 칠할 수가 있습니다.

그래프 분할 및 대칭 이동

그래프 분할 및 대칭이동은 다음의 옵션 추가를 통해 가능합니다.

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary), alpha = 0.4) +
  theme_bw() +
  scale_fill_manual(values = c('red','royalblue','tan')) +
  coord_flip()


ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  scale_fill_manual(values = c('red','royalblue','tan'))  +
  guides(fill = FALSE) + 
  facet_wrap(~left,ncol = 1) 

)

참고로 guides()를 활용하면 범례를 없애는 것도 가능합니다.

coord_flip()을 추가해주면 그래프가 x축, y축이 대각선 대칭이 되어 그래프가 작성이 됩니다.
facet_wrap()은 그래프를 분할하고 싶은 변수의 기준을 입력해준 다음, ncol 옵션을 통해서 몇 개의 열로 표현할지 정해야 합니다. 현재는 ncol = 1을 주었는데 이렇게 되면 그래프를 열 1개로 나열한다는 의미가 됩니다.

글자크기,각도 수정

ggplot(HR,aes(x = salary)) +  
  geom_bar(aes(fill = salary)) +
  theme_bw() +
  scale_fill_manual(values = c('red','royalblue','tan'))  +
  coord_flip() +
  theme(legend.position = 'none',
        axis.text.x = element_text(size = 15,angle = 90),
        axis.text.y = element_text(size = 15),
        legend.text = element_text(size = 15))

'MustLearning with R 1편' 카테고리의 다른 글

10. 기초통계 이론 1단계  (1) 2020.01.29
9. ggplot2를 활용한 다양한 그래프 그리기  (0) 2020.01.29
7. R 중급문법 3단계  (0) 2020.01.29
6. R 중급문법 2단계  (0) 2020.01.29
5. R 기본문법 4단계  (2) 2020.01.29
Comments