날카로운 geom_freqpoly()
geom_freqpoly() 함수는 ggplot2 패키지에서 제공되는 함수 중 하나로, 주어진 데이터의 빈도를 나타내는 도수 다각형(frequency polygon)을 그릴 때 사용됩니다. 도수 다각형은 연속형 변수의 분포를 시각적으로 표현하는 데 유용한 도구로, 데이터 포인트들을 직선으로 이어준 것이락 생각하시면 쉽습니다.
아래에서는 무료 데이터인 tips 데이터셋를 활용하여 geom_freqpoly() 그래프를 그려보았습니다. 아래 코드는 성(sex) 마다 팁을 주는 금액(tip)이 어떻게 다른지를 확인하는 코드입니다.
ggplot(tips, aes(x=tip, color=sex))+ geom_frepoly()
그림에서 보시는 것과 같이, 대체로 남성과 여성의 tip 금액 패턴이 유사한 것을 볼 수 있습니다. 하지만 데이터 자체에서 남성과 여성의 데이터 비중이 크게 차이나기 때문에 특정 금액에서의 각 성별 비중을 정확히 파악하기에는 어려움이 있습니다. 다음에서는 각 범주별 비중이 같다고 보고 그려주는 geom_density() 함수를 이용해보도록 하겠습니다.
부드러운 geom_density()
geom_density() 함수 또한 ggplot2 패키지에서 제공되는 함수 중 하나로, 커널 밀도 추정을 기반으로 한 밀도 플롯(density plot)을 그릴 때 사용됩니다. 밀도 플롯은 연속형 변수의 확률 밀도를 시각적으로 나타내주는 역할을 합니다. geom_freqpoly() 함수와 다른 점은 보다 부드러운 라인을 그려준다는 점에 있습니다.
또 다른 차이점은 geom_density()는 각 범주별로 전체 면적이 1이 되는 곡선을 찾아주기 때문에 각 범주별 데이터량 차이가 클 때에도 동급으로 비교할 수 있습니다.
아래 코드는 위에서 geom_freqpoly()를 그렸던 변수를 geom_density()에 그대로 적용한 것으로, 위의 그림보다는 부드러운 라인을 볼 수 있습니다. 또, 성별 데이터 수가 차이가 있음에도 불구하고 균등한 비중으로 비교할 수 있도록 그려줍니다.
겹쳐진 부분 파악하기 - alpha & na.rm
geom_density() 함수를 색칠해서 보고 싶을 때는 ggplot의 인수로 fill 를 활용하면 됩니다. 하지만, fill 인수를 적용할 경우 각 그래프마다 순서대로 색칠을 해서 나타내주기 때문에 여러 그래프가 겹쳐져서 보이지 않게되는 문제가 있습니다.
그래서 fill 인수를 활용할 때는 반드시 geom_density()의 인수 중 하나인 alpha를 활용하는 것이 중요합니다. alpha 인수는 그래프의 색상의 투명도를 조절해주는 인수로, 0에서 1 사이 숫자를 입력해주면 됩니다. alpha 값이 0에 가까울수록 투명도가 높아지고 1에 가까울수록 투명도가 높아지는 원리입니다.
또한, 그래프 중 일부분을 상세하게 보고 싶을 경우 그래프의 출력범위를 설정해주는 xlim, ylim 함수를 사용할 수 있습니다. 하지만 데이터가 있는 부분을 잘라내버리는 것을 방지하기 위해 R에서 "not available warning sign"을 출력합니다. 이 문제를 해소해주기 위해 na.rm 인자를 활용할 수 있습니다.
예를 들어, 데이터가 0에서 100까지 분포되어 있지만 58에서 68까지의 부분을 확대해서 보고 싶을 때는 na.rm 인자를 TRUE로 설정해서 확대 그래프를 그릴 수 있게 합니다.
ggplot(diamonds, aes(depth, fill=cut, color=cut))+
geom_density(alpha=0.2, na.rm=TRUE)+ xlim(58, 68)
'Data Science' 카테고리의 다른 글
2차원 밀도 시각화, contour 및 rater (0) | 2023.12.31 |
---|---|
범주형 변수 비중 분석, geom_mosaic() (0) | 2023.12.31 |
geom_histogram() 살펴보기 (0) | 2023.12.30 |
geom_point() vs. geom_jitter() (0) | 2023.12.30 |
대표적인 범주형 plot, geom_bar() (0) | 2023.12.30 |