사용데이터 : https://2stndard.tistory.com/68
geom_rug()
사실 산점도는 아무리 오버플로팅을 제거하려고 노력해도 산점도 자체가 가진 한계로 인해 완전히 제거하기란 매우 힘들다. 그래서 앞서 언급한 바와 같이 샘플수를 조절한다던지 투명도를 조절한다던지 하는 방법이 사용되지만 이로 충분치는 않다. 결국 중첩되어 표현된 부분에 얼마나 많은 데이터가 중첩되는지를 알아내는 방법이 필요한데 이를 위해 몇 가지 방법이 제시되고 있다.
이 중 하나가 러그 산점도이다.
러그(rug)는 ’바닥에 까는 발판’으로 X축과 Y축의 바닥에 막대를 표현함으로써 데이터의 밀도를 표현하는 방법이다. 안타깝게도 plotly
에서는 러그를 사용해 데이터의 밀도를 표시하는 방법을 제공하지 않는다. 따라서 ggplot2
의 geom_rug()
를 사용하여 러그 산점도를 만들고 변환하는 방법을 사용할 수 있다.
일단 ‘df_취업률_2000’ 데이터프레임에서 산점도를 다음과 같이 그려보겠다.
|>
df_취업률_2000 ggplot() +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_point로 산점도 레이어 생성
geom_point(aes(x = 졸업자수, y = 취업자수))
위의 산점도를 보면 좌측 하단에 데이터들이 모여있다보니 이 부분에 데이터들이 얼마나 분포되어 있는지 인지하기가 어렵다. 이를 해결하는 방법으로 앞서 설명한 러그 산점도를 사용하면 데이터 밀집 지역의 데이터 분포를 간접적으로 확인해 볼 수 있다.
러그 산점도는 X, Y축에 보조 플롯을 생성함으로써 X, Y축의 2차원 데카르트 좌표에 표현된 데이터를 보완하도록 설계된 보조 시각화 도구이다. 러그 산점도는 개별 사례를 표시하기 떄문에 비교적 적은 데이터 셋에 효과적으로 사용된다.
러그 산점도는 ggplot2
의 geom_rug()
를 통해 X, Y 축상에 러그 레이어를 추가하여 만든다. 다음은 X축에 러그 레이어를 추가하는 방법이다.
|>
df_취업률_2000 ggplot() +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_point로 산점도 레이어 생성
geom_point(aes(x = 졸업자수, y = 취업자수)) +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_reg 레이처 추가
geom_rug(aes(x = 졸업자수), col= "steelblue") +
labs(title = '러그가 포함된 산점도')
위의 산점도를 보면 산점도로 표시되는 모든 데이터에 대해 X축에 매핑되는 졸업자수의 위치에 세로 막대를 포현함으로써 어느 부분에 데이터가 밀집하는 지를 알 수 있다.
이번에는 Y축에 대한 러그 레이어를 다음과 같이 그려볼 수 있다.
|>
df_취업률_2000 ggplot() +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_point로 산점도 레이어 생성
geom_point(aes(x = 졸업자수, y = 취업자수)) +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_reg 레이처 추가
geom_rug(aes(y = 취업자수), col= "steelblue") +
labs(title = '러그가 포함된 산점도')
X, Y 축에 모두 러그 레이어가 포함된 산점도는 다음과 같다.
|>
df_취업률_2000 ggplot() +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_point로 산점도 레이어 생성
geom_point(aes(x = 졸업자수, y = 취업자수)) +
## X축을 졸업자_계, Y축을 취업자_합계_계, color를 대계열로 매핑한 geom_reg 레이처 추가
geom_rug(aes(x = 졸업자수, y = 취업자수), col= "steelblue") +
labs(title = '러그가 포함된 산점도')
geom_marginal()
위에서 언급한 바와 같이 geom_rug()
는 비교적 사례 수가 적은 경우 효과적으로 활용된다. 하지만 앞서와 같이 데이터가 많은 경우는 그 효과성이 매우 떨어진다. 이러한 경우 많이 밀도함수 그래프나 박스 플롯으로 표현하면 geom_rug()
보다 효율적으로 데이터의 밀집도를 표현할 수 있다.
이렇게 데이터가 밀집된 구간을 밀도함수 그래프라 박스 플롯을 사용하여 확인할 수 있는 또 하나의 방법이 가장자리(Marginal) 플롯이다. 가장자리 플롯은 X축과 Y축의 가장자리에 히스토그램, 밀도 분포 플롯, 다음 절에서 설명할 박스플롯 등을 표현함으로서 전체 분포를 상관과 같이 보여준다.
이 가장자리 플롯은 ggplot2
에서 직접적으로 사용하지는 못하고 ggExtra
패키지를 통해 사용할 수 있다. ggExtra
패키지는 ggplot2
의 기능적 향상을 위해 개발된 패키지로 이 패키지의 가장 주된 기능은 ggMarginal
이다. ggMarginal
은 ggplot2
산점도의 X축과 Y축의 가장자리에 히스토그램, 박스플롯, 밀도 플롯을 추가시키는 함수이다.
다음은 ggExtra
패키지의 ggMarginal()
을 사용할 떄 조심해야 하는 것이 ggMarginal()
은 geom_*()
과 같이 +
기호를 사용하여 레이어를 추가하는 방식이 아닌 독립적 함수로 사용된다. 따라서 ggMarginal()
를 사용하기 위해서는 먼저 가장자리 플롯을 만들어야 할 ggplot2
객체를 특정 변수에 저장해야한다. 이 ggplot2
객체를 매개변수로 사용하여 ggMarginal()
의 첫 번째 매개변수로 주고 x, y 축에 매핑할 변수를 지정하고, type으로 해당 변수의 밀도를 표현할 방식을 지정하면 가장자리 플롯이 생성된다.
### ggExtra 패키지 설치
if(!require('ggExtra')) {
install.packages('ggExtra')
library(ggExtra)
}
## 산점도 생성
<- df_취업률_2000 |>
p_marginal ggplot() +
geom_point(aes(x = 졸업자수, y = 취업자수)) +
labs(x = '졸업자', y = '취업자')
## 가장자리 플롯으로 히스토그램을 추가
ggMarginal(p_marginal, x = 졸업자수, y = 취업자수, type = 'histogram')
## 가장자리 플롯으로 밀도함수 플롯을 추가
ggMarginal(p_marginal, x = 졸업자수, y = 취업자수, type = 'density')
## 가장자리 플롯으로 박스 플롯을 추가
ggMarginal(p_marginal, x = 졸업자수, y = 취업자수, type = 'boxplot')
'ggplot2' 카테고리의 다른 글
평균과 중간값 등 통계치의 시각화 in R(표준편차, 백분위, 사분위) (0) | 2022.09.12 |
---|---|
ggplot2 테마 개체 설명(theme element reference) (0) | 2022.08.18 |
대학 종류별 학과 분포 그래프 in R - 업셋(Upset) 그래프 (3) | 2022.07.16 |
대학의 계열별 수도권 입학정원 시각화 in R - 막대 그래프 안에 막대 그래프 (3) | 2022.07.09 |
그래프에 수직선(geom_vline), 수평선(geom_hline), 대각선(geom_abline) 그리기 in R (0) | 2022.06.14 |
댓글