ggplot2调用scale_color_manual为action指定自定义颜色不生效求助
问题核心原因
你代码的核心问题是美学映射与配色函数不匹配:你在aes里将fill参数映射到了action变量,但调用的是控制线条/文本颜色的scale_color_manual,自然不会对矩形填充色生效。
方案1:直接使用red/black等预设颜色分配
把原代码中的scale_color_manual替换为控制填充色的scale_fill_manual即可,修正后的对应代码段:
# 替换原scale_color_manual部分 scale_fill_manual( breaks = c("A", "B", "C"), values = c("A" = "blue", "B" = "red", "C" = "black") )
方案2:使用数据集中的color列分配对应颜色
首先保证每个action对应唯一的颜色值,先提取action和颜色的映射关系,再传入scale_fill_manual即可:
# 先构建action与颜色的映射向量 color_map <- setNames(data$color, data$action) # 替换原scale_color_manual部分 scale_fill_manual( values = color_map )
如果不需要自定义映射,直接使用color列的颜色,也可以直接修改aes里的fill映射,配合scale_fill_identity使用:
# 修改aes中的fill映射 ggplot(data, mapping=aes(ymin=0, ymax=2, xmin=start_min, xmax=stop_min, group=category, fill=color, # 直接映射到color列 text=paste("Task:", str_wrap(string = action, width = 70,), "<br>category: ", format(category, digits=1), "<br>Duration: ", format(action, digits=1)) )) + # 后续其他图层不变,加上scale_fill_identity scale_fill_identity()
其他代码优化点
- 你代码中连续调用了两次
plotly::ggplotly,属于冗余代码,去掉一次即可 - 你在theme中将标题、坐标轴文本颜色设为白色,但后续layout又设置了白色背景,会导致文字不可见,建议调整文本颜色或背景色
- 加载的
librudate库在当前代码中没有用到,可以删除避免不必要的依赖
内容的提问来源于stack exchange,提问作者YihanBao
相关产品推荐
相关产品推荐

