Подтвердить что ты не робот

Ggplot2: добавление фонового слоя

Я хочу добавить темную/световую фазовую информацию на задний план моего графического графа области, чтобы подчеркнуть, как свет влияет на фигуры кривых. Мой DataFrame выглядит следующим образом:

> 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 123 124 128 132 ...

примеры данных:

> head(MDist.median)
  groupname  fCycle fPhase starttime   dists  value
1      rowA predark   Dark       0.3 inadist 110.00
2      rowA predark   Dark      60.0 inadist 123.25
3      rowA predark   Dark     120.0 inadist 124.10
4      rowA predark   Dark     180.0 inadist 128.35
5      rowA predark   Dark     240.0 inadist 131.80
6      rowA predark   Dark     300.0 inadist 140.30

Мой участок разбивает 3 типа dists на ось y по времени запуска по оси x.

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='Changes in Fish Activity and Activity Type') + 
 scale_fill_brewer(type='seq')

Я хочу добавить вертикальные прямоугольники за каждым графиком, которые расположены горизонтально по минимальным и максимальным стартам каждого fCycle, где fPhase == "Темный". Я редактировал мой график в GIMP, чтобы показать, что я имею в виду:

my altered graphset

Я пытаюсь использовать темы, но это не так хорошо работает. Мысли?

ETA

Итак, используя этот пример (от Hadley веб-сайт):

(unemp <- qplot(date, unemploy, data=economics, geom="line", 
  xlab = "", ylab = "No. unemployed (1000s)"))

presidential <- presidential[-(1:3), ]

yr <- range(economics$unemploy)
unemp + geom_rect(
  aes(NULL, NULL, xmin = start, xmax = end, fill = party), 
  ymin = yr[1], ymax = yr[2], data = presidential) + 
  scale_fill_manual(values = alpha(c("blue", "red"), 0.2)
)

Я могу сделать это с моими данными:

dists.med.areaplot + geom_rect(
      aes(NULL, NULL, xmin = phase_start, xmax = phase_end, fill = fPhase), 
      ymin = -Inf, ymax = Inf, data = phase_starts) + 
      scale_fill_manual(values = alpha(c("#cccccc", "#000000"), 0.2)
    )

который добавляет категории Light и Dark в легенду и изменяет все цвета на серый.

Если я оставлю scale_fill_manual(values = alpha(c("#cccccc", "#000000"), 0.2), я получаю прямоугольники, которые я ожидаю, все еще с изменением легенды, но они полностью непрозрачны, поверх моего исходного графика и используют 1-й цвет в моей цветовой последовательности.

Как я могу сделать geom_rect за исходными графиками?

4b9b3361

Ответ 1

С обновленным кодом я бы взял подмножество только областей dark. Затем добавьте

geom_rect(data = dark.subset, aes(xmin = phase_start, xmax = phase_end), 
              ymin = -Inf,
              xmax = Inf,
              fill = alpha("#000000", 0.2))

Это позволит избежать отображения light и dark в любых масштабах. Что касается появления сверху, добавьте свои геометры в другом порядке:

ggplot(...)+
  geom_rect(...)+
  geom_area(...)