2012-09-04 63 views
8

我不確定如何使用ggplot對象的data元素中的數據功能構成方面。在下面的例子玩具,我想要做的是這樣的:ggplot - 按功能輸出方面

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對象已經不使用這種轉變,比如,我想添加一些特別的面向它。

回答

3

這聽起來很熟悉,但我從來沒有設法解決它 - 我認爲facet變量處理不如審美變量處理更強大。

解決您的根本需求 - 專門面對現有的ggplot;請注意,您可以替換現有R ggplot的批發(主)數據集 - 例如

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

'myplot $數據$ ZZ < - myplot $數據$ Z^%% 2'可能會更加簡單。 –

+0

@Josh,是的,但依賴於已經安裝的數據集。有時候我會創建沒有數據的ggplots,然後應用多個數據集。 –

+0

這與我一直使用的解決方案非常相似 - myplot $ data < - transform(myplot $ data,z = z %% 2)'。我用'%+%''命名空間燒了幾次,因爲其他一些包定義了同一個操作符。花了我*小時*來弄清楚。 –