在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
相关产品推荐
相关产品推荐

