Data Analysis

R/ggplot2(시각화)

[R] ggplot2 (1) 그래프 그리기

Holy_Water 2022. 11. 30. 10:03

mpg 데이터로부터 배기량(displ)을 x 축으로, 고속도로 연비(hwy)를 y 축으로 하는 산점도를 그려보자.

> ggplot() +
+   geom_point(mapping=aes(x=displ, y=hwy), data=mpg)

산점도에서 배기량이 커짐지면 연비가 줄어드는 경향을 관찰할 수 있다. 이 산점도를 그린 R 명령어는 두 개의 함수가 결합하여 실행되었다.
- ggplot(): ggplot2 그래프의 좌표축과 좌표평면을 만드는 함수이다. 뒤에서 살펴보겠지만 그래프에 공통된 데이터와 매핑을 설정할 수 있다.
- geom_point(): ggplot() 함수가 만들어 놓은 좌표평면 위에, 점이라는 도형을 이용하여 그래프를 그린다. 각 geom 함수의 그래프는 좌표평면 상에서 별도의 층으로 구성된다.
- ggplot2의 명령문을 입력할 때 여러 함수를 합쳐서 실행하기 위하여 + 연산자를 이용한다. dplyr 패키지의 파이프 연산자와 유사한 역할을 한다. 그러나 문법이 다르기 때문에 ggplot2 명령어 들 사이에는 + 연산자를 사용하여야 한다.

 

앞의 예에서는 geom_point() 함수의 data와 mapping이라는 인수를 설정하였다.
- data: 도형으로 표현할 데이터 프레임을 지정한다.
- mapping: 도형의 시각적 속성과 data에 지정된 데이터 프레임의 열을 쌍으로 대응시킨다. aes() 함수 내에 <도형의 속성>=<데이터 열 이름>의 형식으로 기술된다. 앞의 예에서 점의 x-축 위치에 displ 열이, y-축 위치에 hwy 열이 쌍으로 대응되었다.

 

ggplot2에는 점을 그리는 geom_point() 함수뿐 아니라 다양한 도형을 그리는 geom 함수들이 있다. 이 함수들은 모두 data와 mapping이라는 인수를 가지고 있다.

ggplot2는 그래픽 문법(grammar of graphics)를 가지고 있어서 모든 그래프를 동일한 형식으로 생성할 수 있다. 다음은 ggplot2의 그래픽 문법의 개요를 보여준다. 우리는 이 장에서 ggplot2의 여러 문법적 요소를 하나씩 살펴볼 것이다.

 

범주형 변수를 색상(color) 속성에 매핑하기

다음은 관측치의 종류(class)에 따라 점을 서로 다른 색상(color)으로 표현한 예이다. 자동차의 종류에 따라 점이 다른 색상으로 표현되고, 어떤 색상이 어떤 자동차 종류에 대응되었는지에 대한 범례가 자동 생성된다.

> ggplot() +
+   geom_point(mapping=aes(x=displ, y=hwy, color=class), data=mpg)

앞선 그래프에서 이상치로 표현되었던 점들 중 한 점만 제외하고 모두 2seater 자동차의 관측치였음을 알 수 있다. 이 종류의 차는 스포츠카로 배기량에 비해 가벼운 몸체를 가지고 있어 예외적인 연비가 관측된 것으로 보인다.

 

 

 

연속형 변수를 크기(size), 투명도(alpha), 색상(color), 속성에 매핑하기

- 모양(shape) 속성은 몇 가지 값으로 표현되는 범주형 변수를 표현하기 좋다. 데이터의 열이 연속형 변수이면 연속적인 값을 표현하기 좋은 가로축(x), 세로축(y), 크기(size), 투명도(alpha) 등을 이용하는 것이 좋다. 색상(color)은 범주형 변수와 연속형 변수에 모두 매핑될 수 있다. 범주형 변수로 매핑되면 구분되는 색상으로, 연속형 변수로 매핑되면 색상의 그라데이션으로 값을 표시한다.

다음은 도심 연비와 고속도로 연비를 가로축과 세로축으로 하는 그래프에서 점의 크기 속성을 배기량 열에 매핑한 결과이다. 도심 연비와 고속도로 연비가 좋은 차들은 배기량이 작은 차임을 알 수 있다.

> ggplot() + 
+   geom_point(mapping=aes(x=cty, y=hwy, size=displ), data=mpg)

다음은 동일한 도심 연비와 고속도로 연비 산점도에서 그래프에서 점의 색상을 배기량 열에 매핑한 결과이다. 범주형 변수가 매핑될 때와는 달리 색상의 연속적인 변화인 그라데이션을 사용하여 배기량을 표현하고 있음을 볼 수 있다.

> ggplot() + 
+   geom_point(mapping=aes(x=cty, y=hwy, color=displ), data=mpg)

다음은 동일한 도심 연비와 고속도로 연비 산점도에서 그래프에서 점의 투명도를 실린더 수 열에 매핑한 결과이다.

> ggplot() + 
+   geom_point(mapping=aes(x=cty, y=hwy, alpha=cyl), data=mpg)

그럼 size와 alpha 등의 속성에 연속형 변수가 아니라 범주형 변수를 매핑하면 어떻게 될까? 범주의 순서를 기준으로 각 범주를 1부터 1씩 증가하는 수치로 간주하여 그래프를 그려준다. 다음 예는 size와 alpha 속성에 자동차 종류(class)를 매핑한 결과이다. size와 alpha 속성은 범산형 데이터를 표시하기에는 적절하지 않아서 관련된 경고 메시지를 표시한다. 왜냐하면 점의 크기와 투명도는 연속적인 값을 가지는 속성이기 때문에 연속형 변수를 매핑하는 것이 자연스럽기 때문이다.

> ggplot() +
+   geom_point(mapping=aes(x=displ, y=hwy, size=class), data=mpg)
Warning: Using size for a discrete variable is not advised.