如何在Anychart热力图中用Double值替代Integer作为热力值?
解决Anychart Riskmap适配Double值显示与配色问题
核心处理方案
不用硬套原有Integer类型heat的索引逻辑,直接将计算出的Double类型VPD值作为核心数据传入,同时通过自定义规则实现方块着色与数值显示,具体步骤如下:
1. 扩展数据条目类存储VPD值
修改CustomHeatDataEntry,新增字段存储Double类型的VPD计算值,原heat参数仅做占位使用:
public class CustomHeatDataEntry extends HeatDataEntry { private double vpdValue; public CustomHeatDataEntry(String xAxis, String yAxis, double vpd, String blockColor) { super(xAxis, yAxis, 0); // heat参数传0占位,后续不再依赖它 this.vpdValue = vpd; setColor(blockColor); } public double getVpdValue() { return vpdValue; } }
2. 传入计算后的VPD数据
针对每个行列组合,计算出VPD值后直接传入自定义数据条目,同时通过规则生成对应颜色:
// 示例:计算50F、98%RH对应的VPD值 double vpdResult = calculateVpd(50, 98); // 替换为你的VPD计算方法 data.add(new CustomHeatDataEntry("98%", "50F", vpdResult, getColorFromVpd(vpdResult)));
3. 配置热力图显示VPD数值
通过标签格式化设置,直接显示自定义的Double类型VPD值,可指定小数位数:
riskmap.labels().enabled(true); riskmap.labels().format("{%vpdValue:.3f}"); // 显示保留三位小数的VPD值
4. 基于VPD值实现自动配色
编写配色函数,根据VPD数值区间返回对应颜色:
private String getColorFromVpd(double vpd) { if (vpd < 1.0) return "#90caf9"; // 低VPD对应浅蓝色 else if (vpd < 2.0) return "#ffcc80"; // 中VPD对应浅黄色 else return "#ef5350"; // 高VPD对应浅红色 }
补充说明
如果自定义字段无法被模板引擎直接识别,可通过setField手动绑定:
data.add(new HeatDataEntry("98%", "50F", 0) .setField("vpdValue", vpdResult) .setColor(getColorFromVpd(vpdResult)));
内容的提问来源于stack exchange,提问作者fiefie
相关产品推荐
相关产品推荐

