ggplot2直方图与密度图图例修改异常问题求助
解决ggplot图例名称与标签修改问题
你的代码出错原因是同时调用了scale_fill_manual和scale_fill_discrete(二者互斥,会互相覆盖设置),且绘图时同时映射了fill和color到working_hours,未同步处理两个美学属性的图例,导致异常。以下是两种正确的修改方法:
方法一:在颜色/填充尺度中统一设置
直接在scale_fill_manual和scale_color_manual中同时指定图例名称、标签和颜色,确保二者的name参数一致,让图例自动合并:
# 先清理缺失值(可选,避免绘图警告) datas <- na.omit(datas) p <- ggplot(datas, aes(x=value, fill=working_hours, color=working_hours)) + geom_histogram(aes(y=..density..), alpha=0.5, binwidth = 3, position="identity") + geom_density(alpha=.3) + labs(title="Histogram") + scale_fill_manual( name = "Dose", labels = c("A", "B"), # 对应working_hours的水平顺序,可通过levels(datas$working_hours)查看 values = c("#ED0000FF", "#4668BDFF") ) + scale_color_manual( name = "Dose", labels = c("A", "B"), values = c("#ED0000FF", "#4668BDFF") ) print(p)
方法二:用labs统一设置图例名称
通过labs指定fill和color的图例名称,再单独设置标签与颜色:
datas <- na.omit(datas) p <- ggplot(datas, aes(x=value, fill=working_hours, color=working_hours)) + geom_histogram(aes(y=..density..), alpha=0.5, binwidth = 3, position="identity") + geom_density(alpha=.3) + labs(title="Histogram", fill = "Dose", color = "Dose") + scale_fill_manual(labels = c("A", "B"), values = c("#ED0000FF", "#4668BDFF")) + scale_color_manual(labels = c("A", "B"), values = c("#ED0000FF", "#4668BDFF")) print(p)
注意事项
- 标签顺序需与
working_hours的因子水平对应,可通过levels(datas$working_hours)确认当前顺序,若需调换标签,调整labels向量的顺序即可。 - 建议先通过
na.omit()清理缺失值,避免绘图时出现警告信息。
内容的提问来源于stack exchange,提问作者user3483060
相关产品推荐
相关产品推荐

