You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Highcharts for Android库X-range图表动态Y轴数据实现方案

Android中Highcharts X-range动态Y轴数据处理方案

核心思路

针对每个账号对应Y轴部件标题数量不固定的场景,Android端可以通过动态构建Y轴分类集合+映射数据索引的方式灵活处理,无需预先固定Map数量,具体步骤如下:

具体实现步骤

  1. 收集动态Y轴标题
    先遍历所有账号的部件数据,将需要显示的Y轴标题(部件名称)收集到集合中,按需去重:
ArrayList<String> yAxisCategories = new ArrayList<>();
// 遍历所有账号的部件数据,假设每个部件对象提供getName()方法
for (Account account : accountList) {
    for (Part part : account.getParts()) {
        String partName = part.getName();
        if (!yAxisCategories.contains(partName)) {
            yAxisCategories.add(partName);
        }
    }
}
  1. 配置Y轴分类
    将动态生成的标题集合设置给X-range图表的Y轴:
YAxis yAxis = new YAxis();
yAxis.setCategories(yAxisCategories);
chart.setYAxis(yAxis);
  1. 构建数据点并映射Y轴索引
    每个部件的日期数据需要对应Y轴的索引(即标题在集合中的位置),动态构建数据Map:
ArrayList<Map<String, Object>> data = new ArrayList<>();
// 提前构建标题-索引映射,提升大量数据时的查找效率
HashMap<String, Integer> categoryIndexMap = new HashMap<>();
for (int i = 0; i < yAxisCategories.size(); i++) {
    categoryIndexMap.put(yAxisCategories.get(i), i);
}

for (Account account : accountList) {
    for (Part part : account.getParts()) {
        Map<String, Object> point = new HashMap<>();
        // 获取部件对应的Y轴索引
        int yIndex = categoryIndexMap.get(part.getName());
        point.put("y", yIndex);
        // 将日期转为时间戳数值(Highcharts X轴需要数值类型时间)
        point.put("x", part.getStartTime().getTime());
        point.put("x2", part.getEndTime().getTime());
        // 可额外添加部件名称等信息
        point.put("name", part.getName());
        data.add(point);
    }
}

// 将数据绑定到图表系列
Series series = new Series();
series.setData(data);
chart.setSeries(new ArrayList<>(Collections.singletonList(series)));

关键注意事项

  • 日期数据必须转换为时间戳数值,Highcharts X-range的X轴不支持直接传入字符串格式的日期;
  • 当数据量较大时,提前用HashMap缓存标题与索引的映射,避免反复调用indexOf()降低效率。

内容的提问来源于stack exchange,提问作者jyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:20:34