ggplot2 패키지의 diamonds는 약 54,000개의 다이아몬드에 대한 다음 정보를 측정한 데이터이다.
> diamonds
# A tibble: 53,940 × 10
carat cut color clarity depth table price x y z
<dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
# … with 53,930 more rows
# ℹ Use `print(n = ...)` to see more rows
다이아몬드의 가공의 품질(cut) 수준에 따른 빈도를 시각화해 보자. 현재 cut의 수준별 빈도수에 대한 데이터가 없기 때문에 먼저 이 데이터를 구하기 위한 통계적 변환을 수행해야 한다. 이를 위해 뒤에 설명할 dplyr 패키지의 summarize() 함수를 이용하였다.
> cut_table <- diamonds %>%
+ group_by(cut) %>%
+ summarize(n=n())
> cut_table
# A tibble: 5 × 2
cut n
<ord> <int>
1 Fair 1610
2 Good 4906
3 Very Good 12082
4 Premium 13791
5 Ideal 21551
그리고 geom_col() 함수를 이용하여 막대 그래프를 그린다. geom_col() 함수는 막대라는 도형을 그리는 geom 함수로 x 값의 위치에 y에 매핑된 값을 높이로 가지는 막대를 그린다.
> ggplot(cut_table) + geom_col(aes(x=cut, y=n))
그런데 geom 함수의 stat 인수를 이용하면 원래 데이터를 통계 요약하여 그래프를 그리는 과정을 사용자의 개입없이 쉽게 수행할 수 있다.
> ggplot(diamonds) + geom_bar(aes(x=cut), stat="count")
사실 geom_bar() 함수의 디폴트 stat는 "count"이기 때문에, stat를 생략하여도 같은 결과를 얻을 수 있다.
> ggplot(diamonds) + geom_bar(aes(x=color))
stat_count()가 요약한 데이터에서 절대 빈도수 count가 아니라 상대 빈도수 prop을 사용하여 그래프를 그리려면 y=..prop..을 mapping에 추가하여야 한다. stat가 생성한 요약 데이터의 열을 지정할 때는 ..<요약 변수 이름>.. 형식으로 지정을 한다. 그래야 원래 데이터가 아니라 요약 데이터에서 해당 열을 찾아 매핑을 한다. 상대 빈도는 group 속성에 따라 계산을 하는데, 전체 데이터를 대상으로 상대 빈도를 구하기 위해 모든 데이터가 동일한 그룹이 되도록 group=1로 설정을 하였다
> ggplot(diamonds) + geom_bar(aes(clarity, ..prop.., group=1))
수치형 변수의 통계 요약
carat 같은 연속형 변수에 geom_bar()를 적용하면 구별되는 모든 수치에 대해 빈도를 계산하여 막대를 그린다. 그러나 연속형 변수는 구별되는 값이 매우 많으므로 이렇게 만들어진 그래프로 데이터의 경향을 파악하긴 어렵다.
> ggplot(diamonds) + geom_bar(aes(carat))
'R > ggplot2(시각화)' 카테고리의 다른 글
[R] ggplot2 (7) fill, color, alpha, position 속성 활용 (0) | 2022.11.30 |
---|---|
[R] ggplot2 (6) 히스토그램, 상자 그래프 (0) | 2022.11.30 |
[R] ggplot2 (4) 그래프 계층(layers)과 도형(geoms) (0) | 2022.11.30 |
[R] ggplot2 (3) 측면(facets)으로 나누어 그리기 (0) | 2022.11.30 |
[R] ggplot2 (2) Group 속성 (0) | 2022.11.30 |