AM5热力图自定义多段颜色范围函数失效问题排查求助
AM5热力图自定义颜色规则失效排查步骤
1. 确认偏差值计算逻辑正确
首先检查偏差百分比的计算是否符合预期,正确的偏差公式应为:
// 偏差 = (实际值 - 基线值) / 基线值 * 100% item.deviation = ((item.value - item.movingAvg) / item.movingAvg) * 100;
- 避免除以实际值的错误,这会导致偏差计算完全偏离预期
- 确保计算后的值为百分比格式(如+25代表20%以上,-30代表20%以下)
2. 检查热力图的valueField绑定
热力图的valueField必须绑定到计算后的偏差值字段,而非原始数值:
// 错误写法 valueField: "value" // 正确写法 valueField: "deviation"
若绑定错误,colorRules的条件判断会基于原始数值,无法触发正确的颜色规则。
3. 调整颜色规则的判断顺序
AM5的colorRules按顺序匹配,满足条件后会停止后续判断。正确顺序应先处理极端区间,最后覆盖中间区间:
colorRules: [ // 先匹配正偏差极端值(≥20%) { condition: dataItem => dataItem.dataContext.deviation >= 20, fill: am5.LinearGradient.new(root, { stops: [{ color: "#a5d6a7" }, { color: "#2e7d32" }], rotation: 0 // 可根据需求调整渐变方向 }) }, // 再匹配负偏差极端值(≤-20%) { condition: dataItem => dataItem.dataContext.deviation <= -20, fill: am5.LinearGradient.new(root, { stops: [{ color: "#ef9a9a" }, { color: "#c62828" }], rotation: 0 }) }, // 最后处理中间区间(无需condition,默认匹配剩余情况) { fill: am5.LinearGradient.new(root, { stops: [{ color: "#ffe082" }, { color: "#f57f17" }], rotation: 0 }) } ]
若将中间区间规则放在前面,会导致极端值被覆盖,无法触发对应的渐变颜色。
4. 验证渐变颜色配置
确保LinearGradient的stops配置无误:
- 颜色值使用有效的十六进制、RGB或颜色名称
- rotation参数控制渐变方向(0=水平,90=垂直)
- 确认渐变对象通过
am5.LinearGradient.new()正确创建,无语法错误
5. 检查数据传入有效性
初始化热力图前,打印data数组确认每个item的deviation值是否符合预期:
console.log(data); // 查看每个item的deviation是否为正确的百分比数值
若数据中deviation为空、NaN或计算错误,颜色规则无法正常触发。
6. 确认规则未被覆盖
确保colorRules直接赋值给热力图实例,未被后续代码覆盖:
const heatmap = am5heatmap.Heatmap.new(root, { // ...其他配置 colorRules: [/* 你的规则 */] });
若后续存在修改heatmap.colorRules的代码,会覆盖初始配置导致规则失效。
内容的提问来源于stack exchange,提问作者Rajesh Kandari
相关产品推荐
相关产品推荐

