为自定义添加图例 stat_summary fun.data

Add legend for a custom stat_summary fun.data

如何为我使用 stat_summary 添加到绘图中的对象添加图例?

这是一个例子:

ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + 
    geom_violin(trim=FALSE)
data_summary <- function(x) {
    m <- mean(x)
    ymin <- m-sd(x)
    ymax <- m+sd(x)
    return(c(y=m,ymin=ymin,ymax=ymax))
}
p + stat_summary(fun.data=data_summary)

### Code from http://www.sthda.com/english/wiki/ggplot2-violin-plot-quick-start-guide-r-software-and-data-visualization

我想添加一个描述性图例,解释每个小提琴图中心的线和点代表什么。

根据下面的相关主题,我的印象是可以通过在 stat_summary 中定义 aes(shape="") 然后添加 scale_shape_manual("", values=c("?")) 来实现。但是我一直没有成功。

相关。 ggplot2 legend for stat_summary

听起来你已经掌握了它的工作原理,将一个常量映射到某种美学,然后使用 scale_*_manual() 清理图例。

scale_shape_manual() 中,我想删除图例名称,并通过更改 limits 向图例添加第二个框。我使用 c("Mean", "1 SD") 但这些可以是任何你想要的。

所需形状的数量由图例框的数量决定,因此我将两个给 values,第二个使用 NA,因为图例中的第二个框应该与没意义。

最后,我在 guide_legend() 中使用 override.aes() 删除第一个框中的行。

p + stat_summary(fun.data=data_summary, aes(shape = "Mean")) +
     scale_shape_manual(name = NULL, 
                        limits = c("Mean", "1 SD"),
                        values = c(19, NA),
                        guide = guide_legend(override.aes = list(linetype = c(0, 1))))