ggplot2에서 facet_wrap ()과 facet_grid ()의 차이점은 무엇입니까?


80

ggplot2두 기능에 대한 문서를 읽었습니다 . 차이점이 무엇이고 각 기능 ( facet_wrap()facet_grid()) 을 사용하는 데 적합한 상황이 무엇인지 궁금합니다 .

library(ggplot2)

p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)

p + facet_grid(~ cyl)

이 작은 예를 시작점으로 제공합니다. 차이점은 줄 바꿈으로 인해 플롯이 더 자율적으로 만들어지고 그리드는 하나의 플롯을 모두 함께 만듭니다.

답변:


60

아래 답변은 facet_grid()또는에 2 개의 인수가있는 경우를 나타냅니다 facet_wrap().

facet_grid(x ~ y)x*y일부 플롯이 비어 있어도 플롯 을 표시 합니다. 전의:

library(ggplot2)
g <- ggplot(mpg, aes(displ, hwy))

4 개의 개별 실린더와 7 개의 개별 클래스 값이 있습니다.

g + geom_point(alpha=1/3) + facet_grid(cyl~class)

위의 그림은 일부가 비어 있어도 4 * 7 = 28 플롯을 표시합니다 (클래스가 다른 클래스에 해당하는 실린더 값이 없기 때문입니다 (예 : class = "midsize"가있는 행에 해당 cyl = "5"값이 없음).) facet_wrap(x ~ y). 손, 실제 값이있는 플롯 만 표시합니다.

g + geom_point(alpha=1/3) + facet_wrap(cyl~class)

현재 19 개의 플롯이 표시되며, 실린더와 클래스의 모든 조합에 대해 하나씩 있습니다.


25

facet_wrap(...)ggplots단일 변수를 기반으로 서로 다른 프레임 (패싯)에 함께 문자열 . facet_grid(...)두 가지 변수를 사용할 수 있습니다.

p + facet_grid(cyl~class)

세 번째 변수를 사용하여 각 패싯에서 그룹화 할 수도 있습니다.

qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class)

# 실린더 및 등급별 배기량 대비 hwy 마일리지의 개선 (또는 부족)을 보여줍니다.


11
facet_wrap또한 두 개의 변수를 사용할 수 있습니다.
marbel

9

단일 변수 그림의 경우 facet_grid()또는을 사용할 수 있습니다 facet_wrap().

facet_wrap(~variable)의 수준 수에 대해 플롯의 대칭 행렬을 반환합니다 variable.

facet_grid(.~variable)variable수평 으로 분산 된 수준과 동일한 패싯을 반환합니다 .

facet_grid(variable~.)variable수직 으로 분산 된 수준과 동일한 패싯을 반환합니다 .


1
그 이유 u는 알아 facet_wrap(~variable)하지 facet_wrap(variable~)?
amsquareb

9

주로 ggplot2 책에서 인용, p. 148f.

세 가지 유형의 패싯이 있습니다.

  • facet_null() : 단일 플롯, 기본값입니다.
  • facet_wrap() : 패널의 1d 리본을 2d로 "포장"합니다.
  • facet_grid() : 행과 열을 형성하는 변수에 의해 정의 된 패널의 2D 그리드를 생성합니다.

여기에 이미지 설명 입력

패싯 랩

facet_wrap()긴 패널 리본 (여러 변수에 의해 생성됨)을 만들고 2D로 래핑합니다. 이는 여러 수준의 단일 변수가 있고보다 공간 효율적인 방식으로 플롯을 배열하려는 경우에 유용합니다.

당신은 리본과 그리드에 랩하는 방법을 제어 할 수 있습니다 ncol, nrow, as.tabledir. ncolnrow제어 얼마나 많은 행과 열은 (만 세트 하나에 필요). as.table패싯이 TRUE오른쪽 하단에 가장 높은 값이 있는 테이블 ( ) 또는 FALSE오른쪽 상단에 가장 높은 값이 있는 플롯 ( ) 처럼 배치되는지 여부를 제어합니다 . dir컨트롤 랩의 방향 : 시간 orizontal 또는 V의 ertical.

패싯 그리드

From ?facet_grid: facet_grid()행 및 열 패싯 변수로 정의 된 패널 매트릭스를 형성합니다. 두 개의 불연속 변수가 있고 모든 변수 조합이 데이터에 존재할 때 가장 유용합니다.

행이나 열에 여러 변수를 "추가"하여 사용할 수 있습니다 (예 : a + b ~ c + d.

facet grid()space와 동일한 값을 사용하는 이라는 추가 매개 변수 가 scales있습니다.

# If scales and space are free, then the mapping between position
# and values in the data will be the same across all panels. This
# is particularly useful for categorical axes
ggplot(subset(mpg, manufacturer %in% c("audi", "honda", "toyota")) , aes(drv, model)) +
    geom_point() +
    facet_grid(manufacturer ~ ., scales = "free", space = "free") +
    theme(strip.text.y = element_text(angle = 0))

여기에 이미지 설명 입력

(단순화) 예에서 가져온 ?facet_grid

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.