ggplot按年份设置自定义颜色失效,图表显示灰色求助
问题解决:ggplot自定义颜色不生效(图表显示灰色)
你的图表显示灰色的核心原因是自定义颜色映射的标签与数据中实际生成的Year2值不匹配,导致ggplot无法找到对应的颜色规则,只能使用默认的灰色。
具体问题点
在mutate步骤中,你用gsub("_", " ", name)将Delay_Count和Total_Count转换为:
"Delay Count"(注意Count首字母是大写)"Total Count"
但在scale_color_manual的values和breaks参数里,你写的是:
"Delay count"(count首字母小写)"Total count"
大小写不一致导致所有颜色映射规则都无法匹配,ggplot只能用默认灰色渲染线条。
修正后的代码
只需要把scale_color_manual里的标签调整为和生成的Year2一致的大小写即可:
All_Flights_Combined_DayOfWeek %>% pivot_longer(cols = Delay_Count:Total_Count) %>% mutate(Year2 = paste0(Year, " ", gsub("_", " ", name)), DayOfWeek = factor(DayOfWeek, levels = c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"))) %>% ggplot(aes(x = DayOfWeek, y = value, color = Year2, group = Year2)) + geom_line() + labs(color = "Year", x = "DayOfWeek", y = "Number of Flights") + scale_color_manual(values = c("2003 Delay Count" = "red", "2004 Delay Count" = "green", "2005 Delay Count" = "blue", "2003 Total Count" = "orange", "2004 Total Count" = "yellow", "2005 Total Count" = "purple"), breaks = c("2003 Delay Count", "2004 Delay Count", "2005 Delay Count", "2003 Total Count", "2004 Total Count", "2005 Total Count")) + ggtitle("Flight Count by DayOfWeek")
另一种可选方案
如果你希望保持scale_color_manual里的小写格式,可以修改mutate中的转换逻辑,把转换后的文本转为小写:
mutate(Year2 = paste0(Year, " ", tolower(gsub("_", " ", name))),
这样生成的Year2就是"2003 delay count"这类格式,和你原来的颜色映射标签匹配。
内容的提问来源于stack exchange,提问作者Joseph Ng
相关产品推荐
相关产品推荐

