2016-08-15 59 views
0

我想更好地理解ggplot2,所以當我正在尋找一種方法來完成下面的任務時,我也會很感激爲什麼它當前不工作的解釋。 到目前爲止,我無法找到有關該主題的信息。評估ggplot2中的表達式

我的兩個問題都是關於在ggplot2中使用表達式的。

我有data.frame

set.seed(1) 
    DF <- data.frame(A = 1:24, B = LETTERS[rep(1:4,6)], C = rep(1:3,8)) 

    head(DF, n = 9) 

    # A B C 
    #1 1 A 1 
    #2 2 B 2 
    #3 3 C 3 
    #4 4 D 1 
    #5 5 A 2 
    #6 6 B 3 
    #7 7 C 1 
    #8 8 D 2 
    #9 9 A 3 

我想不轉換我的數據繪製列A的平均值,由B中的值進行分組。 我希望,這是可以做到像下面這樣:

ggplot(DF) + geom_point(aes(x = B , y = mean(A), group = B)) 

但返回以下 ggplot2 plots universal mean, not grouped mean 其中平均值(A)是

怎麼會B.

的所有值相同我開始在不改變數據的情況下進行繪圖?

,我發現自己頂住了來自不時另一個障礙是試圖把一個表達式facet_grid()內或facet_wrap()

例如,說我想用模塊化的分工做出新的臨時列稍後如何面向:

DF$A %% 4 
1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 

我可以把這一列加到我的數據框上。但是,我們強加一個限制,即我無法轉換我的數據。 我本來期望,我可以做這樣的事情:

ggplot(DF)+geom_point(aes(x = B, y = C)) + facet_grid({A %% 4}~.) 

ggplot(DF)+geom_point(aes(x = B, y = C, group = A)) + facet_grid({A %% 4} ~ .) 

甚至

ggplot(DF)+geom_point(aes(x = B, y = C)) + facet_grid(formula({A %% 4} ~.)) 

,但他們都將返回錯誤

Error in layout_base(data, rows, drop = drop) : 
    At least one layer must contain all variables used for facetting 

任何人都可以說以一種揭示ggplot2工作方式的方式向我展示這些嘗試失敗的原因以及如何在不轉換數據的情況下獲得理想的結果?

回答

1

爲什麼你的情節只有一個y值?因爲mean(DF$A)只產生一個值。

如果要進行轉換,則必須使用stat_*函數。這正是他們應該做的。

在這種情況下:

ggplot(DF, aes(x = B , y = A, group = B)) + 
    stat_summary(fun.y = 'mean', geom = 'point') 

或等值:

ggplot(DF, aes(x = B , y = A, group = B)) + 
    geom_point(stat = 'summary', fun.y = 'mean') 

我沒有看到一個方法來做到磨製非現有列。