mtcars数据集cyl变量类型对plot绘图颜色的影响机制咨询
为什么将cyl转为因子后plot的颜色会变化?
这问题问得特别到位!我来给你拆解背后的核心逻辑:
1. 数值型cyl的颜色逻辑
原始的mtcars$cyl是数值型变量(整数类型),当你在plot里用col = mtcars$cyl时,R会直接把这些数值当作颜色索引来使用。
R有一套默认的调色板,你可以用palette()命令查看,默认输出是:
palette() # 输出:"black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray"
这里的每个颜色对应从1开始的索引——比如索引1是黑色,4是蓝色,6是品红色(你看到的紫色),8是灰色。刚好对应你第一次绘图时看到的蓝、紫、灰,完美匹配cyl的4、6、8这三个取值。
2. 因子型cyl的颜色逻辑
当你把cyl转换成因子(factor(mtcars$cyl))后,因子本质是带标签的整数编码:
- 类别
4对应的底层编码是1 - 类别
6对应的底层编码是2 - 类别
8对应的底层编码是3
这时候用col = factor(mtcars$cyl),R会读取因子的底层整数编码当作颜色索引,也就是取默认调色板的第1、2、3个颜色——黑色、红色、绿色,这就是你第二次绘图看到的颜色。
你可以用这个命令验证因子的底层编码:
as.integer(factor(mtcars$cyl)) # 输出会是一串1、2、3的序列
总结
核心区别在于:
- 数值型变量直接用自身的数值作为颜色索引
- 因子变量用其底层的类别序号(从1开始的整数)作为颜色索引
两者调用的默认调色板位置不同,自然就呈现出不一样的颜色啦!
内容的提问来源于stack exchange,提问作者Harish
相关产品推荐
相关产品推荐

