如何在R语言中为两条中位数线设置不同颜色?
修改ggplot2中位数线颜色的方法
要给不同Type的中位数虚线设置不同颜色,只需要把颜色映射到Type变量,再手动指定对应颜色即可,具体修改如下:
关键修改点:
- 把
stat_summary中的固定颜色参数colour = 'black'移到aes()内部,变成aes(group = Type, colour = Type),让颜色和Type绑定 - 添加
scale_colour_manual()函数,为每个Type水平指定目标颜色(根据你的需求,上方虚线设红、下方设蓝,对应你定义的Type顺序设置即可)
修改后的完整代码:
df$Values <- as.numeric(df$Values) df$Month <- factor(df$Month, levels = month.abb) df$Type <- factor(df$Type, levels = c("Paddy", "No Paddy")) ggplot(data = df, aes(x = Month, y = Values, fill = Type)) + geom_boxplot(position = position_dodge(width = 0.9)) + stat_summary( fun.y = median, geom = 'line', aes(group = Type, colour = Type), # 绑定颜色与Type变量 position = position_dodge(width = 0.9), size = 5, linetype = "dotted" # 移除原固定黑色参数 ) + # 手动指定各Type对应的颜色 scale_colour_manual(values = c("Paddy" = "red", "No Paddy" = "blue")) + theme_bw() + labs(x = "Month", y = "Groundwater (m)") + theme( axis.text = element_text(size = 20, color = 'black'), axis.title = element_text(size = 20, color = 'black'), axis.ticks.length = unit(0.5, "cm"), legend.position = c(0.9, 0.08), legend.title = element_blank(), legend.text = element_text(size = 20, color = 'black'), legend.key.size = unit(1, 'cm'), panel.border = element_rect(size = 1, color = 'black') )
补充说明:
如果不想让颜色映射单独生成新图例(你已有填充色的图例),可以在scale_colour_manual()里加上guide = "none",只保留原填充图例:
scale_colour_manual(values = c("Paddy" = "red", "No Paddy" = "blue"), guide = "none")
内容的提问来源于stack exchange,提问作者Yuhwan Seo
相关产品推荐
相关产品推荐

