본문 바로가기

문돌이 존버/R 기초 스터디

R ggplot2 geom 객체 기초 따라잡기

반응형

ggplot2에서 그래프를 그리는 방식은 사실 몇몇 유형의 그래프를 겹쳐놓은 것이라고 볼 수 있습니다. 이때 원하는 유형의 그래프를 각각 따로 그릴 수 있는데, 이는 다시 말해서 해당하는 유형의 기하 객체(geom)를 사용하여 그래프를 작성함을 의미합니다. 또 각 기하 개체의 사용이란, 해당하는 geom 함수를 선택하여 실행한 것을 의미합니다.

쉽게 말해, 각 geom 함수를 실행하면 해당하는 유형의 그래프가 작성된 레이어(layer)가 생성되고, 서로 다른 geom 함수를 사용하여 여러 개의 레이어를 얻었다면 최종적으로 그려지는 그래프는 여러 개의 레이어가 겹쳐진 것이죠. 

참고로 ggplot2 에는 약 30개 이상의 geom 함수가 있다고 합니다. 

그럼 지금까지 봤던 geom_point 말고 geom_smooth 함수를 살펴봅시다. 이 함수는 일반적으로 두 변수 간의 관계를 가장 잘 설명해주는 매끄러운 곡선을 의미하는 비모수 회귀곡선을 나타낼 때 사용됩니다.

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

만약 geom_pointgeom_smooth 를 동시에 사용하고 싶다면 어떻게 해야 할까요? 이와 같은 중복 입력의 문제는 아래와 같이 글로벌 매핑을 설정하면 됩니다. 참고로 geom_point(), geom_smooth() 각각 따로 설정하는 것을 로컬 매핑이라 부르는데, geom 함수에서는 로컬 매핑이 글로벌 매핑보다 우선해서 적용됩니다. 

또한, 아래 geom_smooth() 만 입력하면 se=TRUE, 즉 smooth line의 표준오차(=비모수 회귀곡선의 신뢰구간)를 그리게 됩니다. 아래 파란선 주위에 있는 회색 부분이 표준오차입니다. se=FALSE 로 하면 당연히 회색 부분이 없어지겠죠. 

ggplot(data=mpg, mapping=aes(x=displ, y=hwy))+
  geom_point()+
  geom_smooth() # 디폴트값 se=TRUE 

글로벌 매핑으로 drv 변수를 사용하여 색깔로 데이터를 구분해보겠습니다. 

ggplot(data=mpg, mapping=aes(x=displ, y=hwy, color=drv))+
  geom_point()+
  geom_smooth(se=FALSE)

아래는 글로벌 매핑이 아니라 geom_point() 의 로컬 매핑으로 drv 변수를 색깔에 매핑했습니다. smooth line에는 색깔이 적용되지 않은 것을 확인할 수 있죠. 

ggplot(data=mpg, mapping=aes(x=displ, y=hwy))+
  geom_point(mapping=aes(color=drv))+
  geom_smooth(se=FALSE)

다음은 다양하게 색깔, 사이즈, line 타입 등을 설정해준 버전입니다. 

ggplot(data=mpg, mapping=aes(x=displ, y=hwy))+
  geom_point(mapping=aes(color=drv), size=2)+
  geom_smooth(mapping=aes(linetype=drv), se=FALSE)

위에서 설명했듯이 ggplot 그래프는 결국 여러 개의 레이어가 겹쳐진 형태라고 보시면 됩니다. 따라서 각 레이어는 다른 데이터를 사용할 수 있습니다. 아래처럼 mpg 샘플 데이터의 변수 displ hwy 산점도를 그리되 변수 drv 에 따라 점 색을 다르게 하고, 두 변수의 비모수 회귀곡선을 추가하되 drv 값이 4인 데이터만을 대상으로 추정할 수 있습니다. 

ggplot(data=mpg, mapping=aes(x=displ, y=hwy))+
  geom_point(mapping=aes(color=drv), size=2)+
  geom_smooth(data=filter(mpg, drv=="4"), se=FALSE, color="RED")

728x90
반응형