※ 해당 내용은 위의 책을 통해 R을 학습하면서 개인적으로 정리한 내용임을 밝힙니다.

 

[ 사용 Packages = tidyverse ] 

library(tidyverse)

[ 실습용 Data Set = mpg ]

# mpg : 미 환경보호당국이 수집한 38개의 차 모델들에 대한 관측값
mpg

[ 참고 사항 ]

ggplot2는 보통 ggplot(data=<데이터>)에 지옴 함수를 + 하여 작동

  → 즉 그래프 형식을 변경하거나 표현을 추가하고 싶다면 +되는 지옴함수를 바꾸면 됨 

 

ggplot2 다양한 방식의 산점도 작성 ( geom_point() )

 

산점도는 두 변수에 대한 상관관계를 알아보는데 유용.

 

[ 사용 형식 ] ggplot(data=<데이터>) + <geom_함수>(mapping = aes(<매핑모음>))

 

geom_point() 함수로 산점도를 작성해보면 배기량(displ)과 연비(hwy)가 음의 상관관계가 있음을 알 수 있다.

# geom_point() = Plot에 점 레이어 추가, 산점도 생성
# aes()의 x, y 인수는 x, y축으로 매핑될 변수를 지정
ggplot(data=mpg) + geom_point(mapping = aes(x=displ, y = hwy))

 

위 산점도를 보면, 점들이 이상하게 규칙적이다. 그 이유는 geom_point()는 값들을 반올림하여 나타냈기 때문이다. 반올림하는 이유는 점들이 겹치는 것을 방지하기 위함이라고 한다. 그러면 실제 값을 산점도에 표현하려면 어떻게 해야할까? 지옴 함수를 geom_jitter()로 바꾸어주면 간단히 해결된다.

 

 <참고> geom_jitter()를 통해선 실제 값으로 산점도 표현이 가능하다.

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

 

 

 

다시 geom_point()로 돌아와서, 산점도에 색상을 표시해 차형식(Class) 도 함께 구분해서 보고 싶다면, Color를 추가하고, 어떤 변수의 색상을 구분하고 싶은지 지정해 주면 된다.

# color에 차형식(class) 변수를 지정, 색상 랜덤배정하여 구분됨
ggplot(data = mpg) + geom_point(mapping = aes(x=displ, y=hwy, color=class))

색상이 잘 구분이 안된다 싶으면 ggplot2에서는 아래와 같이 여러 방법으로 표현도 가능하다. 즉, 이 중에 Data를 가장 잘 표현하는 것으로 Data분석자가 선택하면 된다. 책에서는 이를 심미성 매핑이라고 부른다. 

 

# 크기 심미성 매핑, 크기로 구분
ggplot(data = mpg) + geom_point(mapping = aes(x=displ, y=hwy, size=class))

# 투명도 심미성 매핑, 투명도로 구분
ggplot(data = mpg) + geom_point(mapping = aes(x=displ, y=hwy, alpha=class))

# 모양 심미성 매핑, 모양으로 구분 (최대 6개까지 가능)
ggplot(data = mpg) + geom_point(mapping = aes(x=displ, y=hwy, shape=class))

 

그래프를 표현하다 보면, 직접 조건을 넣어 구별하고 싶을 때도 있다. 이 때는 변수에 조건식을 넣어주면 ggplot2가 알아서 True/False로 구분해준다. 색상구분만 해보자면, ( 색상, 크기, 모양, 투명도 모두 적용 가능 )

# Color에 조건을 넣어주면, 조건에 대한 True/False로 색상을 구분
# cyl 변수는 차량의 기통 수 ( 즉, 8기통 보다 크냐, 작으냐로 True/False 색상 구분 )
ggplot(data = mpg) + geom_point(mapping = aes(x=displ, y=hwy, color=cy<8))

차형식(Class) 변수를 심미성 매핑( 색상, 모양 등 구분 )을 하면 차형식 안의 변수가 7개이기 때문에 복잡해 보이기도 한다. 어떨 때는 그냥 아예 그래프를 쪼개서 보는 것이 유리 할 수도 있다. 이때는 면 분할 함수 Facet_wrap를 추가하면 1개의 변수를 기준으로 쉽게 그래프를 분할 가능하다.

 

※ 아래 코드형식을 보면 Facet_wrap 함수를 +로 추가한 것을 볼 수 있다. 이처럼 ggplot는 +로 함수들을 추가하여, 기능이나 표현을 추가한다는 것을 볼 수 있다.

 

# 플롯을 하나의 변수에 대해 면 분할 Facet_wrap()
# (중요) Facet_wrap()에 전달하는 변수는 이산형(연속형 X)이어야 함.
# 이산형이란 것은 정수형, 문자형 Data가 뚝뚝 끊어져 있어야 한다는 것.
# nrow = 그래프 분할 시 몇개의 행으로 구분하는지 지정 ( 굳이 안써도 됨 )
ggplot(data=mpg) + geom_point(mapping = aes(x=displ, y=hwy)) + facet_wrap(~ class, nrow=2)

 

 

 

여기서 더 욕심을 내면, 2개의 변수로 그래프를 쪼개고 싶을 때가 있다. 이 때는 Facet_grid()를 추가하자.

 

# 플롯을 두 변수 조합으로 면분할 Facet_grid()
# 두개의 변수가 ~로 행, 열 구분됨 ( 변수를 생략하려면 .을 찍음 )
ggplot(data=mpg) + geom_point(mapping = aes(x=displ, y=hwy)) + facet_grid(drv ~ cyl)

 

<참고> Code 작성시 주의 사항

# 실행 안됨
ggplot(data=mpg)
+ geom_point(mapping = aes(x=displ, y = hwy))

# 실행됨
ggplot(data=mpg) +
 geom_point(mapping = aes(x=displ, y = hwy))

위와 같이 +는 라인의 시작이 아니라 끝에 와야 Code의 실행이 가능하다.

+ Recent posts