Почему этот facet_grid не удаляет столбцы?

Привет, есть этот набор данных:

tdat=structure(list(Condition = structure(c(1L, 3L, 2L, 1L, 3L, 2L, 
1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L, 
3L, 2L, 1L, 3L, 2L), .Label = c("AS", "Dup", "MCH"), class = "factor"), 
    variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L), .Label = c("Bot", "Top", "All"), class = "factor"), 
    value = c(1.782726022, 1, 2.267946449, 1.095240234, 1, 1.103630141, 
    1.392545278, 1, 0.854984833, 4.5163067, 1, 4.649271897, 0.769428018, 
    1, 0.483117123, 0.363854608, 1, 0.195799358, 0.673186975, 
    1, 1.661568993, 1.174998373, 1, 1.095026419, 1.278455823, 
    1, 0.634152231)), .Names = c("Condition", "variable", "value"
), row.names = c(NA, -27L), class = "data.frame")

> head(tdat)
  Condition variable    value
1        AS      Bot 1.782726
2       MCH      Bot 1.000000
3       Dup      Bot 2.267946
4        AS      Bot 1.095240
5       MCH      Bot 1.000000
6       Dup      Bot 1.103630

Вы можете построить это так, используя этот код:

ggplot(tdat, aes(x=interaction(Condition,variable,drop=TRUE,sep='-'), y=value,
                 fill=Condition)) + 
                 geom_point() +
                 scale_color_discrete(name='interaction levels')+
                                 stat_summary(fun.y='mean', geom='bar',
                 aes(label=signif(..y..,4),x=as.integer(interaction(Condition,variable))))+
                                 facet_grid(.~variable)

введите здесь описание изображения

Но, как видите, он не удаляет неиспользуемые столбцы из каждого аспекта, знаете почему?


person Wicelo    schedule 26.07.2013    source источник


Ответы (1)


Вы получаете все уровни, показанные на графике, потому что все уровни используются. Уровни сбрасываются, если они вообще не используются. Чтобы удалить уровни в каждом аспекте, добавьте scale="free_x" к facet_grid(). Но это не будет работать в конкретном случае, потому что вы используете разные операторы значений x в вызовах ggplot() и stat_summary(). Я бы предложил добавить новый столбец перед построением графика с взаимодействием.

tdat$int<-with(tdat,interaction(Condition,variable,drop=TRUE,sep='-'))
ggplot(tdat,aes(int,value,fill=Condition))+
  stat_summary(fun.y='mean', geom='bar')+
  geom_point()+
  facet_grid(.~variable,scales="free_x")

введите здесь описание изображения

В этом случае вы можете упростить свой код без interaction(), потому что вы также используете facet_grid().

ggplot(tdat,aes(Condition,value,fill=Condition))+
  stat_summary(fun.y='mean', geom='bar')+
  geom_point()+
  facet_grid(.~variable)

введите здесь описание изображения

person Didzis Elferts    schedule 26.07.2013
comment
о, так это баг? Допустим, я хочу использовать взаимодействие(), а не facet_grid(). Не знаете ли вы, как исправить проблему с наложением? - person Wicelo; 26.07.2013
comment
Обновлен мой ответ, чтобы показать реальную проблему вашего кода и падение уровней. - person Didzis Elferts; 26.07.2013
comment
@Wicelo Это не ошибка. - person joran; 26.07.2013
comment
Добавление нового столбца для взаимодействия - хорошая идея, я буду иметь это в виду на будущее, спасибо! - person Wicelo; 26.07.2013