使用颜色图例为ggplot添加总计或平均值

时间:2013-05-09 02:31:22

标签: r ggplot2 legend summary

我有一个带有颜色图例的情节,并希望为其添加总计/平均geom_...系列。

例如:

d <- ggplot(data=mtcars, aes(x=cyl, y=mpg, color=factor(vs))) + geom_point()
d + stat_summary(fun.y = "mean", fun.ymin = "mean", fun.ymax = "mean", colour = "black")

example plot

我希望总geom_颜色为黑色(在我的示例中有效),并且在图例中标注为“total”(示例中缺少)。新的“总”标签应该是图例中的最后一个值。

在这个例子中,vs的因子水平是0和1.这在两个方面过度简化了我的情况:

  1. 我有很多因素水平,所以我正在寻找一种不需要手动操作图例中颜色/标签的解决方案。
  2. “Total”在这个数据集中自然是最后的(因为它按字母顺序排在0和1之后),但是在我的数据集中它位于中间的某个位置。那些因素可能需要重新排序?为了这个例子,数据集假定首先列出“total”,以显示如何重新排序标签。
  3. 最后,有时我认为stat_summary无法正确计算均值,因此我希望通过第二个数据集手动计算均值或总计的灵活性。例如:

    d + geom_point(data = as.data.table(mtcars)[, list(avg = mean(mpg)), by = "cyl"] ... )
    

1 个答案:

答案 0 :(得分:4)

一种方法是覆盖另一个未使用的geom,ala this related question的答案:

d <- ggplot(data=mtcars, aes(x=cyl, y=mpg, color=factor(vs))) + geom_point()
d + stat_summary(fun.y = "mean", fun.ymin = "mean", fun.ymax = "mean", 
                 colour = "black", aes(shape="total"), geom="point") +
    guides(colour=guide_legend(order=1), shape=guide_legend(title=NULL, order=2))

resultant plot