ggplot2中geom_point()按年份设置颜色不生效问题求助
ggplot2散点图颜色显示异常问题排查
问题描述
基于mpg数据集绘制displacement(displ)与highway mpg(hwy)的散点图,要求点大小设为5,1999年和2008年的汽车显示不同颜色。运行代码后图例颜色显示正常(1999年蓝色、2008年红色),但实际散点图的点全部为灰色。
问题原因
cut函数的分组区间不匹配:
使用cut(year, c(1999, 2008))生成的是左闭右开区间,实际会得到(-Inf,1999]和(1999,2008]两个分组。而mpg数据中的year只有1999和2008两个值,1999年的数据会被分到(-Inf,1999]分组,和scale_color_manual里指定的"1999"分组名完全不对应,导致颜色映射失效,点只能显示默认灰色。固定属性错误放入映射函数:
size = 5是固定的点大小,不需要放在aes()里。把固定值放进aes()会让ggplot将其当成变量映射处理,不仅多余,还可能干扰其他属性的映射逻辑。
修正后的代码
# Create a scatter plot to show the relationship between displacement and highway mpg # Set point size as 5 # Set different colors for cars in 1999 and cars in 2008 library(ggplot2) ggplot(mpg, aes(x = displ, y = hwy)) + geom_point(aes(colour = factor(year)), size = 5) + scale_color_manual(name = "year", values = c("1999" = "blue", "2008" = "red"))
修正说明
- 直接将
year转为因子(factor(year))作为颜色映射变量,无需使用cut函数——year本身就是离散的两个取值,能直接匹配scale_color_manual中的颜色定义。 - 将
size = 5移到geom_point()的aes()外部,作为固定参数设置点大小,避免不必要的变量映射。
内容的提问来源于stack exchange,提问作者Brian Kim
相关产品推荐
相关产品推荐

