如何修改ggplot中geom_line的分组颜色,交换男女线条的红蓝配色?
交换ggplot分组折线图的颜色解决方案
首先注意你的绘图代码里数据框名写错了,要把prevalence2021GGPLOT改成df,否则会找不到对应数据。
要实现Sex=M设为蓝色、Sex=W设为红色的需求,这里提供两种简单方法:
方法一:手动指定颜色映射(推荐,直观可控)
用scale_color_manual()直接给每个Sex水平分配目标颜色,修改后的完整代码如下:
ggplot(data = df, aes(x = age_cat, y = proportion, color = Sex))+ geom_point()+ labs(title="Prevalence 2021", y="Prevalence (%)", x="Age category") + geom_errorbar(aes(ymin=(lower), ymax=(upper)), width=.2) + theme_bw()+ geom_line(aes(group = Sex)) + # 这里去掉unlist(Sex),直接用Sex即可正确分组 scale_color_manual(values = c("M" = "blue", "W" = "red")) # 核心:指定颜色映射
- 关键代码
scale_color_manual(values = c("M" = "blue", "W" = "red")):直接给Sex的两个水平绑定对应颜色,新手一眼就能看懂逻辑。 - 额外修正:
geom_line里的group = unlist(Sex)没必要,group = Sex就能实现正确的分组连线。
方法二:调整因子顺序适配默认配色
如果想保留ggplot默认的红蓝配色,只是交换顺序,可以先修改Sex的因子水平顺序:
# 先调整Sex的因子排序,让W排在前面 df$Sex <- factor(df$Sex, levels = c("W", "M")) # 再执行绘图代码(无需手动指定颜色) ggplot(data = df, aes(x = age_cat, y = proportion, color = Sex))+ geom_point()+ labs(title="Prevalence 2021", y="Prevalence (%)", x="Age category") + geom_errorbar(aes(ymin=(lower), ymax=(upper)), width=.2) + theme_bw()+ geom_line(aes(group = Sex))
这种方法会让ggplot默认给第一个因子水平(W)分配红色,第二个(M)分配蓝色,间接实现颜色交换,但不如手动指定颜色直观。
内容的提问来源于stack exchange,提问作者RvS
相关产品推荐
相关产品推荐

