VertexAI中ggplot2图例不显示且scale_fill_manual调用报错问题
VertexAI中ggplot2图例不显示且scale_fill_manual调用报错问题
嗨,我来帮你搞定这个ggplot2的图例和报错问题~咱们一步步来分析:
问题根源
- 图例不显示:你现在是直接在
geom_line()里用col参数硬编码颜色,但没有把颜色关联到ggplot的美学映射(aes())里。ggplot只有识别到美学映射里的分组变量,才会自动生成图例。 - scale_fill_manual报错:
geom_line()控制线条颜色的参数是color,而scale_fill_manual()是用来设置填充色的(比如柱状图的填充),两者完全不匹配,自然会报错;另外你代码里的scale_fill_manual还有语法错误(比如注释格式、引号问题)。
修正方案
推荐两种方式,选你顺手的来:
方式1:合并数据为长格式(更简洁易维护)
先把三个数据框合并,添加一个分组列,这样只需要一次geom_line()调用:
library(dplyr) # 合并三个数据集,添加分组标签 combined_data <- dplyr::bind_rows( dplyr::mutate(obs.ushe.after.move, group = "Job-to-Job"), dplyr::mutate(obs.ushe.after.stayer, group = "Job Stayers"), dplyr::mutate(obs.ushe.after.non, group = "Nonemployed-to-Employed") ) # 绘图 ggplot(combined_data, aes(x = obs, y = med_wage_diff, color = group)) + geom_line(linewidth = 1.1) + scale_color_manual( name = "", # 图例标题为空 values = c( "Job-to-Job" = "#0054E5", "Job Stayers" = "#E5B300", "Nonemployed-to-Employed" = "#595959" ) )
方式2:不合并数据,手动在每个geom_line里添加颜色映射
如果不想调整数据结构,就把color放到每个geom_line()的aes()里,然后用scale_color_manual统一设置颜色:
ggplot() + geom_line(data = obs.ushe.after.move, aes(x = obs, y = med_wage_diff, color = "Job-to-Job"), linewidth = 1.1) + geom_line(data = obs.ushe.after.stayer, aes(x = obs, y = med_wage_diff, color = "Job Stayers"), linewidth = 1.1) + geom_line(data = obs.ushe.after.non, aes(x = obs, y = med_wage_diff, color = "Nonemployed-to-Employed"), linewidth = 1.1) + scale_color_manual( name = "", values = c( "Job-to-Job" = "#0054E5", "Job Stayers" = "#E5B300", "Nonemployed-to-Employed" = "#595959" ) )
关键要点
- 一定要把
color放进aes()里,让ggplot识别这是分组变量,才能生成图例 - 用
scale_color_manual对应线条颜色,而不是scale_fill_manual(后者是给填充元素用的) - 保证
scale_color_manual里的values和分组标签一一对应,这样图例显示才准确
备注:内容来源于stack exchange,提问作者Connor Hill
相关产品推荐
相关产品推荐

