2012-09-04 3 views
8

ggplot 개체의 data 요소에있는 데이터의 기능을 어떻게 처리해야할지 확신이 서지 않습니다. 다음 장난감 예에서, 내가하고 싶은 것은이 같은 것입니다 :ggplot - facet by function 출력

df <- data.frame(x=1:8, y=runif(8), z=8:1) 
ggplot(df, aes(x=x, y=y)) + geom_point() + facet_wrap(~ (z %% 2)) 

하지만 그 오류를 제공합니다 : Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting.

나는 데이터 프레임으로 변환하여 원하는 결과를 얻을 수 있습니다

ggplot(transform(df, z=z%%2), aes(x=x, y=y)) + geom_point() + facet_wrap(~ z) 

을하지만 종종 내가 이미 ggplot 객체 주어진 한 경우 예를 들어, 이러한 변환을 사용하지하는 것이 바람직 그리고 내가 원하는 그것에 ad-hoc faceting을 추가하십시오.

답변

3

이 말은 나에게 익숙한 것 같지만, 나는 그것을 고치지 못했다. 나는 패싯 변수 처리가 심미적 인 변수 처리보다 덜 강력하다고 생각한다.

근본 요구 사항을 어드레싱 - 기존의 ggplot을 ad-hoc 패싯으로 지정; 예를 들어

myplot %+% transform(myplot$data, z=z%%2) 
+1

'myplot $ 데이터 $ ZZ <- - 기존 R ggplot의 도매 (마스터) 데이터 세트를 대체 할 수 있습니다 myplot의 $ 데이터 $ Z를 %% 2' 더 간단 할 수있다. –

+0

@Josh, true이지만 이미 설치된 데이터 세트에 의존합니다. 때로는 데이터가없는 ggplots을 빌드 한 다음 여러 데이터 세트를 적용합니다. –

+0

그것은 myplot $ data <- transform (myplot $ data, z = z %% 2)'와 같이 제가 사용 해본 솔루션과 매우 흡사합니다. 일부 다른 패키지가 동일한 연산자를 정의했기 때문에 네임 스페이스를'% + % '로 몇 번 구워 냈습니다. 그걸 알아 내는데 * 시간 *을 보냈습니다. –