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

在R中使用scale_fill_discrete时如何自定义填充颜色并修改图例标签?

问题原因

你遇到的报错是因为同时添加了两个填充比例尺(scale_fill_discrete和scale_fill_manual),ggplot会自动用后者覆盖前者,导致之前设置的图例标签丢失。解决核心是用单个比例尺同时完成颜色自定义和标签修改,以下是两种可行方案:


方法1:用scale_fill_manual整合颜色与图例设置

直接在scale_fill_manual中同时指定原始分类值、自定义标签和对应颜色,一次性完成需求,避免比例尺冲突:

ggplot(data=dataA, aes(x=time, y=value))+
  geom_area(aes(group=location, fill=location), position="stack", linetype=1, size=0.5 ,colour="black") +
  # 整合颜色与图例标签设置
  scale_fill_manual(
    breaks = c("A","B","C","D"),  # 对应原始location的取值
    labels = c("Main_town","B","C","D"),  # 自定义图例标签
    values = c("darkblue","darkred","khaki4","darkgreen")  # 自定义填充颜色
  )+
  theme_classic(base_size=18, base_family="serif")+
  theme(legend.position="right",
        axis.line=element_line(linewidth=0.5, colour="black"))+
windows(width=5.5, height=5)

注意:breaks、labels、values的顺序必须一一对应,确保"A"匹配"Main_town"和"darkblue",其他分类同理。


方法2:先修改数据的因子标签,再指定颜色

提前将location转换为因子并修改标签,绘图时仅需指定颜色,图例会自动使用修改后的标签:

# 数据预处理:修改location的因子标签
dataA$location <- factor(dataA$location,
                         levels = c("A","B","C","D"),
                         labels = c("Main_town","B","C","D"))

# 绘图时仅设置自定义颜色
ggplot(data=dataA, aes(x=time, y=value))+
  geom_area(aes(group=location, fill=location), position="stack", linetype=1, size=0.5 ,colour="black") +
  scale_fill_manual(values = c("darkblue","darkred","khaki4","darkgreen"))+
  theme_classic(base_size=18, base_family="serif")+
  theme(legend.position="right",
        axis.line=element_line(linewidth=0.5, colour="black"))+
windows(width=5.5, height=5)

这种方法把标签修改前置到数据处理阶段,适合后续需要重复使用该数据集绘图的场景。


内容的提问来源于stack exchange,提问作者J.K Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:53:23