将变量 geom_hline 添加到条形图的所有方面

use*_*148 2 r ggplot2

我有一个使用 ggplot2 库的条形图:

plot <- qplot(Date, data=cns, 
              geom="bar", binwidth = 1, 
              fill=Type, facets = Name ~ .)
Run Code Online (Sandbox Code Playgroud)

这给了我一个多面条形图,按名称。

cns 的前 11 行如下所示:

            Name       Date      Type     Days
1           Name 1 2013-03-12 Requested    0
2           Name 1 2013-03-14 Requested    0
3           Name 1 2013-03-19 Requested    0
4           Name 2 2013-03-01 Completed    1
5           Name 2 2013-03-01 Requested    0
6           Name 2 2013-03-07 Completed    3
7           Name 2 2013-03-08 Requested    0
8           Name 2 2013-03-08 Requested    0
9           Name 3 2013-03-08 Completed    0
10          Name 3 2013-03-13 Requested    0
11          Name 3 2013-03-12 Completed    0
Run Code Online (Sandbox Code Playgroud)

我想向每个方面添加一条水平线,其中包含平均天数(特定于方面或名称)。这也很复杂,因为“天”列为所有“请求”类型输入了 0,这意味着要获得我正在寻找的平均值,我真的想要mean(cns$Days)/(NROW(cns)/2).

我试过:

plot + geom_hline(aes(yintercept=(sum(cns$Days)/(NROW(cns)/2))))
Run Code Online (Sandbox Code Playgroud)

但是,正如我所预料的那样,它在每个方面都放置了一条具有相同值的水平线。如果有意义的话,我希望这条线是特定于方面的。

这可以做到吗?

Did*_*rts 6

您可以在数据框中创建包含平均值的新列。我将其命名为并使用库中的y.int函数进行计算。这里仅针对 的值计算平均值(应排除)。ddply()plyrTypeCompletedRequested

library(plyr)
cns<-ddply(cns,.(Name),transform,y.int=mean(Days[Type=="Completed"]))
Run Code Online (Sandbox Code Playgroud)

现在使用geom_hline()新列向每个方面添加线条。

plot + geom_hline(aes(yintercept=y.int))
Run Code Online (Sandbox Code Playgroud)