Guide :: Facetting ——————————————————

Published by onesixx on

 

 

일반적으로 그룹화를 시각적요소(color, shape, size)로하는 것 대신, 
facet은  상대적위치를 기반으로 나눠 plotting하여 그룹간의 차이를 보는 것.

set.seed(666)
dd <- data.frame( xx=rnorm(666), yy=rnorm(666))
dd$ty <- cut(dd$xx, 3, labels=letters[1:3])

dd %>% ggplot(aes(xx,yy)) + geom_point(aes(color=ty))
dd %>% ggplot(aes(xx,yy)) + geom_point(aes(shape=ty))
dd %>% ggplot(aes(xx,yy)) + geom_point(aes(size=ty))

dd %>% ggplot(aes(xx,yy)) + geom_point() + facet_wrap(~ty)

facet에서는 (시각적요소를 통해 그룹간 비교를 하는 방식과 달리) 중복없이 plot을 나누므로, 그룹간의 비교를 좀 더 시각적으로 보기위해,
각 평균을 위에 덧그리거나, 나머지 그룹값을 아래에 깔아놓는 방법이 있다.

dd_each_mean <- dd %>% group_by(ty) %>% summarise(xx=mean(xx), yy=mean(yy)) %>% rename(ty2 =ty)
dd %>% ggplot(aes(xx,yy)) + geom_point() + 
  geom_point(data=dd_each_mean, aes(color=ty2), size=3) +
  facet_wrap(~ty)

dd_bg <- dd[,c("xx","yy")]
dd %>% ggplot(aes(xx,yy)) +  geom_point(data=dd_bg, color="grey66") +
  geom_point() +  facet_wrap(~ty)

 

Continuous Variable 를 discrete Variable로 변환하여  Faceting

 

cut_interval(x, n) 같은 길이로 나누기   
cut_width(x, width) 폭너비인 bin으로 나누기
cut_number(x, n) 같은 갯수로 나누기 

 

 

위치를 제어하는 요소

Layer :: position

Layer 안에 겹치는 Object들 위치 조정

Guide :: Facetting

Data의 subset들을  한 페이지에 분리하여 여러 Plot으로 배치

Guide :: Scaling

Data가 위치를 매핑하는 방법

facet_wrap()과 facet_grid()의 argument로 사용할 때,

scales=

space =

“fixed” x, y scale 고정
“free” panel에 따라 x, y 의 scale이 다르다. 
“free_x” x scale는 데이터에 따라, y scale는 고정
“free_y” y scale는 데이터에 따라, x scale는 고정

 

dd <- subset(mpg, cyl!=5 & drv%in%c("4","f") & class!="2seater")
dd$model        <- reorder(dd$model,         dd$cty)
dd$manufacturer <- reorder(dd$manufacturer, -dd$cty)

dd %>% ggplot(aes(cty, model)) + geom_point()

dd %>% ggplot(aes(cty, model)) + geom_point() +
       facet_grid(manufacturer~.)

dd %>% ggplot(aes(cty, model)) + geom_point() +
  facet_grid(manufacturer~., scales="free_y")

dd %>% ggplot(aes(cty, model)) + geom_point() +
  facet_grid(manufacturer~., scales="free_y", space="free_y") +
  theme(strip.text.y=element_text(angle=0))

 

Guide :: Coordinate System

Scailng 조합을 통해 2차원 좌표계 만들기

panel로 분리된 sub-plot

lable _both facet의 label에 값/변수명 둘다 출력
  _bquote facet의 label에 값에 따라 변형
  _parsed facet의 label에 plotmath형식의 수식출력
  _value facet의 label에 값 출력

 

Facetting

 

facet_null() facet_wrap() facet_grid()
단일 plot

원상복귀시 주로 사용한다.

변수의 조합하여 1차원 패널의 집합

fomula의 형태와 사실 상관없이
가능한 조합으로 생성된 plot을  Page에 구분하여 그린다.  

2차원 grid

fomula의 행/열에 변수지정에 따라
일단 grid를 만들고, 데이터의 유/무와 상관없이 모든 조합을 2차원형태로 plotting한다.

facet_wrap()

1번 형태를 가장 많이 사용하지만, 2번 형태도 사용가능하다
사실 fomular가 drv~year+cyldrv+year~cyl , drv~cyl+year , .~year+drv+cyl  모두 순서만 다를뿐 결과는 같다.
각 factor변수의 level은 drv(3개), year(2개), cyl(4개)로 전체 조합은 24개이지만, 가능한 조합은 16개이므로 16개 plot만 그려진다.
조합에 수에 따라 자동적으로 word-wrap과 같이 row를 만들어 낸다.
3번에서 ncol/nrow 둘중에 하나만 정의하면, 나머지는 자동적으로 결정되어 하나만 설정하면된다. 
as.table은 Sorting의 기준을 설정하는 argument로 기본값이 True (위 왼쪽에서 아래오른쪽 순)이고, 
dir은 plot을 나열하는 순서의 기준을 설정하는 argument로 기본값이 horizontal (왼쪽에서 오른쪽 순)이다.

scales = “free”  scales = “free_y”

dd <- mpg %>% data.table
ds <- dd[, c("cty", "hwy",  "drv", "cyl", "year")]
p <- ds %>% ggplot(aes(hwy, cty)) + geom_point() + labs(x=NULL, y=NULL)

p + facet_wrap(~cyl)                                           # 1.
p + facet_wrap(drv~year+cyl)                                   # 2.
p + facet_wrap(cyl~drv)                                        # 3-1.
p + facet_wrap(cyl~drv, ncol=3, nrow=4, as.table=F, dir="v")   # 3-2.

facet_grid()

각 변수를 가지고 level을 참고하여 Grid를 만들고, 거기에 Plot을 생성한다. 
따라서 각 factor변수의 level은 drv(3개), year(2개), cyl(4개)로 전체 조합은 24개이므로, 각 plot에 데이터가 없더라고 24개 plot이 모두 그려진다.
horizontally/ vertically 로 자를경우에는  . 을 표기하여 가독성을 높인다.
space라는 argument는 scale과 값은 같다. 

dd <- mpg %>% data.table
ds <- dd[, c("cty", "hwy",  "drv", "cyl", "year")]
p <- ds %>% ggplot(aes(hwy, cty)) + geom_point() + labs(x=NULL, y=NULL)

p + facet_grid(.~cyl)
p + facet_grid(drv~cyl)
p + facet_grid(drv~year+cyl)

facet_wrap vs. facet_grid 비교

gridExtra::grid.arrange(
  p + facet_wrap(year~drv),
  p + facet_grid(year~drv)
)

———————————–

position_dodge Dodge overlapping objects side-to-side
position_fill Stack overlapping objects on top of each another
position_identity Don’t adjust position
position_jitter Jitter points to avoid overplotting
position_jitterdodge Simultaneously dodge and jitter
position_nudge Nudge points a fixed distance
position_stack Stack overlapping objects on top of each another

facet_grid Lay out panels in a grid
facet_wrap Wrap a 1d ribbon of panels into 2d

 

 

 

Categories: ggplot2

onesixx

Blog Owner

Leave a Reply

Your email address will not be published.