代码之家  ›  专栏  ›  技术社区  ›  dnagirl

ggplot2:添加背景层

  •  10
  • dnagirl  · 技术社区  · 15 年前

    > 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的min和max starttimes水平定位,其中fPhase==“Dark”。我在GIMP中编辑了我的graphset以显示我的意思:

    my altered graphset

    我一直在尝试使用主题,但效果不太好。思想?

    所以,使用这个例子(来自Hadley的 website

    (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)
        )
    

    这增加了光明和黑暗的类别的传说和改变所有的颜色为灰色。

    如果我忘了 scale_fill_manual(values = alpha(c("#cccccc", "#000000"), 0.2) ,我得到的矩形,我希望仍然与图例的变化,但他们是完全不透明的,在我原来的图形,并使用前2个颜色在我的颜色序列。

    我怎样才能在原始图后面绘制几何图形?

    1 回复  |  直到 5 年前
        1
  •  8
  •   C. Braun    7 年前

    有了你的更新代码,我只需要 dark 区域。然后添加

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

    这将避免映射 light 黑暗的

    ggplot(...)+
      geom_rect(...)+
      geom_area(...)
    
    推荐文章