2012-09-04 17 views
8

ggplot nesnesinin data öğesindeki bir veri işleviyle nasıl karşı karşıya kalacağından emin değilim. Aşağıdaki oyuncak örnekte, ne yapmak istiyorum böyle bir şeydir:ggplot - işlev çıkışına göre yönlendirme

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)) 

Ama bu hata veriyor: Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting.

Veri çerçevesi dönüştürerek istenilen sonuç elde edilebilir:

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

ancak çoğu zaman zaten bir ggplot nesne verilmiş etmişse için, böyle bir dönüşüm kullanmak için arzu edilir ve I want Bir miktar geçici faceting ekle.

cevap

3

Bu bana tanıdık geliyor, ama bunu düzeltmeyi hiç başaramadım - faset değişken işlemenin, estetik değişken işlemeden çok daha az güçlü olduğunu düşünüyorum.

Kök gereksiniminizi adresleme - geçici bir şekilde var olan bir ggplot'a; Örneğin

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

'MyPlot $ veri $ zz <- - Varolan R ggplot toptan (ana) veri kümesini değiştirmek unutmayın MyPlot $ veri $ z %% 2'FC daha basit olabilir. –

+0

@Josh, true, ancak zaten yüklü olan veri kümesine güveniyor. Bazen veri içermeyen ggplots yapıyorum ve daha sonra birden çok veri seti uyguluyorum. –

+0

Bu benim de kullandığım çözüm gibi - 'myplot $ data <- dönüşümü (myplot $ data, z = z %% 2)' gibi. Başka bir paket aynı operatörü tanımladığından, ad alanı iki kez% +% 'ya yazdım. Bunu anlamak için * saat * aldım. –