2016-08-15 5 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 

Я хочу, чтобы построить среднее значение столбца А, сгруппированных по значениям B без преобразования мои данные. я ожидал бы, что можно сделать что-то вроде следующего:

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

но возвращает следующее ggplot2 plots universal mean, not grouped mean , где среднее (A) является одинаковым для всех значений В.

Как мог Я собираюсь сделать это без преобразования моих данных?

Другой барьер, который я оказываюсь против время от времени пытается положить выражение внутри 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 

Может ли кто-нибудь lain to the way, который показывает, как работает 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') 

Я не вижу способ сделать facetting на несуществующие столбцы.

Смежные вопросы