본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
ggplot2

밀도 분포 플롯(geom_density) in R

by 아참형인간 2022. 6. 12.
density.knit

사용데이터 : https://2stndard.tistory.com/68

밀도 분포 플롯


밀도 분포 플롯는 히스토그램의 또 다른 표현 방법이다. 히스토그램은 막대로 도수분포가 표현되기 때문에 다소 딱딱한 감이 있지만 밀도 분포 플롯은 전체 분포가 곡선으로 표현되어 히스토그램보다 부드럽게 표현된다는 장점이 있다. 또 도수분포에 대한 사례수를 직접적으로 사용하는 것이 아니고 확률 밀도 함수에 따른 확률값을 사용하기 때문에 0부터 1사이의 값으로 표현된다는 것이 히스토그램과의 차이다.

ggplot2에서는 밀도 분포 그래프를 그리기 위해 geom_density()를 제공한다. geom_density()은 연속형 일변수 수치 데이터를 표현하는데 사용되는 기하 요소 함수이다. 일변수 수치 데이터의 분포를 확률분포함수로 계산하여 표현한다. 따라서 X값에 따라 계산된 연속 확률 분포값은 확률이기 때문에 1보다 작은 값들이고, 이 값들이 연결되어 표현된다. geom_density()는 연속 확률 분포를 산출하고 시각화한다. 따라서 앞선 두 함수와는 달리 통계 요소의 기본값이 ’density’로 설정된다.

##  df_취업통계를 ggplot 객체로 생성하고 p_density에 저장
p_density <- df_취업률 |>
  ggplot()
## p_density객체에 x축을 '취업률'열로 매핑한 geom_density 레이어를 생성
p_density + 
  geom_density(aes(x = 취업률_계))

## p_density객체에 x축을 '취업률'열로 매핑, 미적 요소 설정한 geom_density 레이어를 생성
p_density + 
  geom_density(aes(x = 취업률_계), color = 'blue', fill = 'skyblue', linetype = 2, size = 1, alpha = 0.5)

다중 밀도 분포 플롯

다중 밀도 분포 플롯는 변수 변량에 따라 여러개의 밀도 분포 플롯을 그리는 방법을 말한다. 다중 밀도 분포 플롯은 다중화할 변수를 color나 fill에 매핑함으로써 생성할 수 있다.

p_density <- df_취업률 |>
  ggplot() + 
  labs(x = '취업률', y = '분포 확률')

p_density_multi1 <- p_density +
  ## X축을 취업률_계, color, fill, linetype을 과정구분으로 매핑하고 미적요소를 설정한 geom_density 레이어 추가
  geom_density(aes(x = 취업률_계, color = 과정구분, fill = 과정구분, linetype = 과정구분), alpha=0.4, position = 'identity') +
  labs(title = '매핑을 사용한 다중 밀도 분포 플롯')

p_density_multi1

앞의 다중 밀도 플롯은 color와 fill로 매핑하여 생성하였지만 facet_wrap()을 사용하여 각각의 밀도 플롯를 분리할 수도 있다.

p_density +
  ## X축을 취업률_계로 매핑하고 미적요소를 설정한 geom_density 레이어 추가
  geom_density(aes(x = 취업률_계), alpha=0.4, position = 'identity') +  
  ## 대계열별로 다중 밀도 플롯 생성
  facet_wrap(~대계열) + 
  labs(title = 'facet을 사용한 다중 밀도 분포 플롯')

앞의 두가지 다중 밀도 확률 플롯를 모두 사용하면 다음과 같다.

p_density +
  ## X축을 취업률_계, color, fill, linetype을 과정구분으로 매핑하고 미적요소를 설정한 geom_density 레이어 추가
  geom_density(aes(x = 취업률_계, color = 과정구분, fill = 과정구분, linetype = 과정구분), alpha=0.4, position = 'identity') +
  ## 대계열별로 다중 밀도 플롯 생성
  facet_wrap(~대계열) + 
  labs(title = '매핑과 facet을 사용한 다중 밀도 분포 플롯')

댓글