geom 도형의 대부분의 속성은 도형의 시각적 표현을 직접적으로 변화시키는 속성들이다. 대표적인가 x, y, color, shape, size, fill 등의 속성이다. 이러한 속성은 시각적으로 효과가 직접적으로 들어나므로 이해하기 쉽다.
반면 group 속성은 도형의 시각적 속성을 직접 변형하는 것이 아니라, 도형을 그릴 때 데이터를 어떤 식으로 그룹으로 묶어 사용할지만 지정한다. 이를 통해 그래프의 전체 모양에 영향을 준다.
geom_point() 함수는 관측치 하나에 점 하나를 대응시켜 그래프를 그린다. 그러나 어떤 geom 함수는 여러 관측치를 그룹으로 묶어서 하나의 도형을 그린다. 대표적인 예가 geom_line()과 geom_smooth() 함수이다. 이 함수들은 여러 관측치를 사용하여 하나의 선을 완성한다. 만약 group 속성이 매핑되어 있지 않으면 모든 데이터를 하나의 그룹으로 하여 선 하나를 그린다. 반면 group 속성이 매핑되면, group속성에 매핑된 값을 기준으로 데이터를 그룹화하여 각각 도형 하나(geom_line()과 geom_smooth() 함수에서는 선 하나)를 그린다. 지금 설명한 내용을 예를 들어 살펴보자.
그룹으로 나누어 선 그래프 그리기
Orange 데이터는 5 그루의 나무에서 age(나이: 일)와 circumference(둘레: mm)을 측정한 결과이다. Tree 변수는 5그루 나무에 붙인 일련번호이다.
Tree age circumference
1 1 118 30
2 1 484 58
3 1 664 87
4 1 1004 115
5 1 1231 120
6 1 1372 142
7 1 1582 145
8 2 118 33
9 2 484 69
10 2 664 111
11 2 1004 156
......
다음은 age와 circumference를 x와 y aesthetics에 매핑한 그래프이다.
> ggplot() + geom_point(mapping=aes(x=age, y=circumference), data=Orange)
이번에는 위와 동일한 매핑으로 geom_line()을 그려보자. geom_line()은 x좌표가 작은 것에서 큰 것 순으로 점을 연결하여 하나의 선을 완성한다.
> ggplot() + geom_line(mapping=aes(x=age, y=circumference), data=Orange)
동일한 나이 대의 데이터가 많아서 하나의 선으로 연결한 그래프가 의미를 갖기 어려워 보인다. 이번에는 group 속성에 Tree 변수를 매핑해 보자. 데이터가 Tree의 값에 따라 그룹으로 묶여 선이 각각 그려졌음을 확인할 수 있다.
> ggplot() +
+ geom_line(mapping=aes(x=age, y=circumference, group=Tree), data=Orange)
이산형 변수는 group 속성으로 자동 매핑된다.
각 나무의 데이터를 구분해 보기 위하여 다음처럼 color 속성을 추가해 보자. Tree 변수는 순서형 범주 데이터로 이산형 데이터이므로, color가 뚜렷이 구분되는 색으로 매핑되었다. 그리고 수준의 순서에 따라 범례도 정렬되었다.
> Orange$Tree
[1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5
Levels: 3 < 1 < 5 < 2 < 4
> ggplot() +
+ geom_line(mapping=aes(x=age, y=circumference, group=Tree, color=Tree), data=Orange )
그런데 이를 좀 더 간편히 할 수 있는 방법이 있다. ggplot2는 속성에 매핑된 변수 중에 이산형 변수가 있으면 이를 group 속성에 자동으로 매핑시킨다. 다음처럼 color 속성에 Tree를 매핑만 하면, 자동으로 이를 group 속성에 반영하여 선을 구분하여 그려준다.
> ggplot() +
+ geom_line(mapping=aes(x=age, y=circumference, color=Tree), data=Orange)
다음 예는 linetype 속성으로 각 나무를 구분한 예이다.
> ggplot() +
+ geom_line(mapping=aes(x=age, y=circumference, linetype=Tree), data=Orange)
eom_smooth() 함수에서 group 속성
group 속성이 이용되는 또 다른 예가 geom_smmooth() 함수이다. 이 함수는 group에 매핑된 정보에 따라 데이터를 그룹화하여 추세선을 그린다.
> ggplot() +
+ geom_smooth(mapping=aes(x=age, y=circumference), data=Orange )
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
> ggplot() +
+ geom_smooth(mapping=aes(x=age, y=circumference, color=Tree),
+ data=Orange )
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
> ggplot() +
+ geom_smooth(mapping=aes(x=age, y=circumference, color=Tree),
+ data=Orange, se=F)
`geom_smooth()` using method = 'loess' and formula 'y ~ x'
마지막 예에서는 geom_smooth() 함수의 se 인수를 FALSE로 설정하여 신뢰구간이 표시되지 않도록 하였다.
'R > ggplot2(시각화)' 카테고리의 다른 글
[R] ggplot2 (4) 그래프 계층(layers)과 도형(geoms) (0) | 2022.11.30 |
---|---|
[R] ggplot2 (3) 측면(facets)으로 나누어 그리기 (0) | 2022.11.30 |
[R] ggplot2 (1) 그래프 그리기 (0) | 2022.11.30 |
[R] 고급시각화 실습 (2) (0) | 2022.11.24 |
[R] 고급시각화 실습 (0) | 2022.11.24 |