R语言绘制相关图(correlogram)时的着色运行原理是什么
着色逻辑原理
这类写法的核心作用是把[-1,1]区间内的相关系数值,线性映射到调色板的正整数索引上,实现相关系数大小和颜色的一一对应。
底层逻辑拆解
- 相关系数的取值范围固定是
[-1, 1],而R中向量的索引只能是≥1的正整数,且必须落在调色板的长度范围内,所以需要对相关系数做一次线性转换,才能匹配调色板的索引规则。 - 通用转换公式为:假设你准备了长度为
L的调色板,要把相关系数x映射到[1, L]的索引区间,转换公式为x * ((L-1)/2) + ((L+1)/2)。
对应案例说明
- 你找到的100色调色板案例
my_colors是长度为100的渐变调色板,代入公式的话:(L-1)/2 ≈ 50,(L+1)/2 ≈50,所以就简化为x*50 +50:
- 相关系数接近-1时,计算结果≈1,对应调色板第1个颜色
- 相关系数接近0时,计算结果≈50,对应调色板中间位置的颜色
- 相关系数接近1时,计算结果≈100,对应调色板最后1个颜色
刚好完全覆盖100个颜色的梯度,每个颜色对应约0.02区间的相关系数值,所以n=50时视觉效果最优。
- 官方11色调色板案例
官方示例的调色板长度为11,代入公式的话:(L-1)/2 =5,(L+1)/2=6,所以官方写法就是x*5 +6,刚好把-1的相关系数映射到索引1,1的相关系数映射到索引11,完美匹配11个颜色的区间。
你测试时n值不对效果差的原因
- 如果n取值过小:转换后的索引范围会远小于调色板长度,大量颜色没有被用到,不同相关系数的颜色区分度极低
- 如果n取值过大:转换后的索引范围会超过调色板长度,超出范围的索引无法取到对应颜色,会出现显示异常。
内容的提问来源于stack exchange,提问作者another_rando
相关产品推荐
相关产品推荐

