ECharts 异步加载数据

ECharts 异步加载数据教程

ECharts 支持非常简单的异步数据加载机制:初始化图表后,使用 fetchaxios 或其他方式获取数据,然后调用 myChart.setOption() 更新数据即可。ECharts 会自动计算新旧数据的差异,并添加合适的动画过渡。

1. 基本异步加载(现代方式,使用 fetch + Promise)

推荐使用原生 fetch(无需 jQuery)。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <title>ECharts 异步加载数据示例</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
    <div id="main" style="width: 800px; height: 600px;"></div>

    <script>
        // 初始化图表(先设置空数据,避免空白等待)
        const myChart = echarts.init(document.getElementById('main'));
        myChart.setOption({
            title: { text: '异步加载柱状图' },
            tooltip: {},
            legend: { data: ['销量'] },
            xAxis: { data: [] },
            yAxis: {},
            series: [{
                name: '销量',
                type: 'bar',
                data: []
            }]
        });

        // 显示 loading 动画(推荐,改善用户体验)
        myChart.showLoading();

        // 异步获取数据(这里用公开 JSON 示例)
        fetch('https://echarts.apache.org/examples/data/asset/data/life-expectancy-table.json')
            .then(response => response.json())
            .then(data => {
                // 假设取前6条数据作为示例
                const categories = data.slice(0, 6).map(item => item[1]);  // 国家
                const values = data.slice(0, 6).map(item => item[4]);      // 预期寿命

                myChart.hideLoading();  // 隐藏 loading

                myChart.setOption({
                    xAxis: { data: categories },
                    series: [{ data: values }]
                });
            })
            .catch(err => {
                myChart.hideLoading();
                console.error('数据加载失败:', err);
            });
    </script>
</body>
</html>

2. 带 loading 动画的完整流程

  • setOption 空数据 + 样式。
  • 调用 myChart.showLoading() 显示默认加载动画(可自定义样式)。
  • 数据到来后 hideLoading() + setOption 更新。

loading 配置示例(自定义):

myChart.showLoading({
    text: '数据加载中...',
    color: '#5470c6',
    textColor: '#000',
    maskColor: 'rgba(255, 255, 255, 0.8)',
    zlevel: 0
});

3. 动态实时更新数据(例如每秒刷新)

setInterval(() => {
    fetch('/api/new-data')
        .then(res => res.json())
        .then(newData => {
            myChart.setOption({
                series: [{ data: newData.values }]
            });
        });
}, 2000);  // 每2秒更新一次

ECharts 会自动动画显示数据变化。

注意事项

  • 系列匹配:更新时建议用 name 属性匹配系列,避免顺序错乱。
  • 大数据:ECharts 支持百万级数据,异步加载时可结合 dataset 或按需加载。
  • 框架中:在 Vue/React 中,使用 ref 获取实例,在 mounted/useEffect 中异步加载。

官方文档(最新版):https://echarts.apache.org/handbook/zh/how-to/data/dynamic-data/

如果你有具体后端接口、图表类型(如折线实时数据)或框架需求,告诉我,我可以给出更精确的代码!

文章已创建 3420

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部