ggplot2如何为各月份分组添加对应中位数水平线
实现方法
你之前的写法无法实现分月中位数线,是因为geom_hline()不会自动按aes()中指定的group分组计算统计量,median(metric)会对全数据集计算得到唯一值,所以只能生成一条全局中位数线。
最简单的实现方式是直接用stat_summary()层,无需提前手动计算分组中位数,代码如下:
ggplot(data, aes(x = month, y = metric)) + # 将年份相关的分组和颜色映射放到geom_line内,避免影响统计层的分组逻辑 geom_line(aes(color = year, group = year)) + # 按x轴(月份)分组计算中位数,生成水平虚线 stat_summary( fun = median, geom = "hline", aes(yintercept = after_stat(y)), linetype = "dashed", color = "gray50" )
如果希望中位数线和折线共用同一套颜色映射,也可以保留全局颜色映射,手动指定统计层的分组逻辑为月份即可:
ggplot(data, aes(x = month, y = metric, color = year, group = year)) + geom_line() + stat_summary( fun = median, geom = "hline", aes(yintercept = after_stat(y), group = month), linetype = "dashed" )
内容的提问来源于stack exchange,提问作者FilipW
相关产品推荐
相关产品推荐

