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

关于ECharts时间序列图表缩放时动态加载不同粒度数据的功能咨询

ECharts 实现时间序列图表动态粒度调整功能

完全可以实现你描述的需求,核心是通过监听ECharts的缩放事件,结合异步数据请求来动态切换数据粒度:

实现思路

  • 监听缩放操作:利用ECharts提供的datazoom事件,捕捉用户的放大/缩小操作,获取当前图表显示的时间范围
  • 判断粒度需求:根据当前显示的时间跨度,决定需要请求的聚合粒度(比如跨度≤4小时时请求30分钟/15分钟粒度数据,跨度更大时恢复1小时粒度)
  • 更新图表数据:向服务器发起对应粒度的数据请求,拿到数据后通过setOption方法更新图表的series数据

核心代码示例

// 初始化图表(已预先加载1小时粒度的初始数据)
const myChart = echarts.init(document.getElementById('main'));

// 监听datazoom事件
myChart.on('datazoom', function(params) {
  // 获取当前缩放后的时间范围(假设x轴为时间戳格式)
  const xAxis = myChart.getModel().getComponent('xAxis');
  const [startTime, endTime] = xAxis.axis.scale.getExtent();
  const timeSpan = endTime - startTime;

  // 防抖处理(避免用户连续缩放时频繁触发请求)
  clearTimeout(window.zoomTimer);
  window.zoomTimer = setTimeout(() => {
    if (timeSpan <= 4 * 3600 * 1000) {
      // 放大到4小时范围内,请求30分钟粒度数据
      fetch(`/api/time-series?granularity=30min&start=${startTime}&end=${endTime}`)
        .then(res => res.json())
        .then(newData => {
          myChart.setOption({
            series: [{ data: newData }]
          });
        });
    } else {
      // 缩小到超过4小时范围,恢复1小时粒度数据
      fetch('/api/time-series?granularity=1h')
        .then(res => res.json())
        .then(originalData => {
          myChart.setOption({
            series: [{ data: originalData }]
          });
        });
    }
  }, 300);
});

注意事项

  • 初始化图表时需先加载默认的1小时粒度数据
  • 建议添加防抖逻辑,避免用户连续缩放时频繁发起请求
  • 需确保后端接口支持按不同粒度和时间范围返回聚合数据,时间参数格式要与接口要求匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:50:25