ggplot2: линия группы управления наложением на набор графических панелей

У меня есть сложенный участок, сделанный с помощью ggplot2:

dists.med.areaplot<-qplot(starttime,value,fill=dists,facets=~groupname,
    geom='area',data=MDist.median, stat='identity') + 
    labs(y='median distances', x='time(s)', fill='Distance Types')+
    opts(title=subt) + 
    scale_fill_brewer(type='seq') +
    facet_wrap(~groupname, ncol=2) + grect #grect adds the grey/white vertical bars

Это выглядит так:

Я хочу добавить наложение профиля контрольного графика (внизу справа) ко всем графикам на выходе (groupname==rowH — это контроль).

До сих пор мои лучшие усилия дали это:

cline<-geom_line(aes(x=starttime,y=value), 
  data=subset(dists.med,groupname=='rowH'),colour='red')

dists.med.areaplot + cline

график проблем

Мне нужно, чтобы 3 красные линии были 1 красной линией, которая скользит по верхней части темно-синей секции. И мне нужна эта идентичная линия (линия rowH) для наложения каждой из панелей.

Фрейм данных выглядит так:

> str(MDist.median)
'data.frame':   2880 obs. of  6 variables:
 $ groupname: Factor w/ 8 levels "rowA","rowB",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ fCycle   : Factor w/ 6 levels "predark","Cycle 1",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ fPhase   : Factor w/ 2 levels "Light","Dark": 2 2 2 2 2 2 2 2 2 2 ...
 $ starttime: num  0.3 60 120 180 240 300 360 420 480 540 ...
 $ dists    : Factor w/ 3 levels "inadist","smldist",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value    : num  110 117 115 113 114 ...

Красная линия должна быть рассчитана как сумма value для каждого времени запуска, где groupname='rowH'. Я пытался создать cline следующими способами. Каждый результат приводит к ошибке или неправильному выводу:

#sums the entire y for all points and makes horizontal line
cline<-geom_line(aes(x=starttime,y=sum(value)),data=subset(dists.med,groupname=='rowH'),colour='red') 

 #using related dataset with pre-summed y's 
> cline<-geom_line(aes(x=starttime,y=tot_dist),data=subset(t.med,groupname=='rowH'))
> dists.med.areaplot + cline
Error in eval(expr, envir, enclos) : object 'dists' not found

Мысли?

Расчетное время прибытия:

Похоже, проблема, с которой я столкнулся с 'dists' not found, связана с тем, что исходный график dists.med.areaplot был создан с помощью qplot. Чтобы избежать этой проблемы, я не могу использовать qplot. Это код рабочего сюжета:

cline.data <- subset(
        ddply(MDist.median, .(starttime, groupname), summarize, value = sum(value)),
        groupname == "rowH") 
cline<-geom_line(data=transform(cline.data,groupname=NULL), colour='red') 

dists.med.areaplot<-ggplot(MDist.median, aes(starttime, value)) +
  grect + nogrid +
  geom_area(aes(fill=dists),stat='identity') + 
  facet_grid(~groupname)+ scale_fill_brewer(type='seq') +
  facet_wrap(~groupname, ncol=2) + 
  cline

в результате получается этот набор графиков: alt text


person dnagirl    schedule 24.08.2010    source источник


Ответы (1)


Этот пост в блоге Learning R должен быть полезен:

http://learnr.wordpress.com/2009/12/03/ggplot2-overplot-in-a-faceted-scatterplot/

Возможно, стоит вычислить сводку за пределами ggplot с plyr.

cline.data <- ddply(MDist.median, .(starttime, groupname), summarize, value = sum(value))
cline.data.subset <- subset(cline.data, groupname == "rowH")   

Затем добавьте его на график с помощью

last_plot() + geom_line(data = transform(cline.data.subset, groupname = NULL), color = "red")
person JoFrhwld    schedule 24.08.2010
comment
Я не думаю, что вы хотите удалить переменную groupname. - person hadley; 25.08.2010
comment
Если вы удалите groupname, разве это не приведет к построению линии по всем граням? - person JoFrhwld; 25.08.2010
comment
Хм, может быть, я неправильно понял вопрос. - person hadley; 25.08.2010
comment
@hadley: я хочу разместить эту строку rowH на каждом аспекте. Идея состоит в том, чтобы позволить пользователю легко увидеть, чем обработка отличается от контроля. - person dnagirl; 25.08.2010
comment
@JoFrhwld: мне нравится, как вы создали cline.data.subset. Это очень чисто. К сожалению, когда я рисую так, как вы предлагаете, я получаю сообщение об ошибке: Error in eval(expr, envir, enclos) : object 'dists' not found. dists — это столбец в основном наборе данных, содержащий имена переменных и задающий заливку. Почему-то geom_line() обращает на это внимание, но я не знаю почему. - person dnagirl; 25.08.2010
comment
geom_line() просто наследует то, что fill было сопоставлено с dists, даже если он не будет использовать fill. Итак, вам нужно установить fill либо на NA, либо на NULL (я не уверен, что именно) в geom_line() вот так geom_line(data = transform(cline.data.subset, groupname = NULL), color = "red", fill = NA) - person JoFrhwld; 25.08.2010
comment
@JoFrhwld: В итоге я сделал свой первоначальный сюжет (до контрольных линий) полностью с ggplot(), а не с опорой на qplot(). Я добавил рабочий код в свой вопрос. Я бы не добрался туда без твоей помощи. Ткс! - person dnagirl; 25.08.2010