You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:00:09