千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > echarts更新数据不重绘

echarts更新数据不重绘

来源:千锋教育
发布人:xqq
时间: 2023-11-23 14:34:27 1700721267

一、基本概念

echarts是百度开源的一个专注于数据可视化的图表库。在使用echarts进行动态数据展示时,经常需要更新图表的数据。更新数据时,可以使用setOption方法重新渲染整个图表,也可以使用一些更灵活的方法避免重绘整个图表而只更新部分数据。这些方法包括数据动态修改、动态增加数据、异步加载数据、基于时间轴更新数据等等。这些方法的使用可以提高数据展示的效率和用户体验,减小对服务器的负载。

二、数据动态修改

数据动态修改是一种直接修改echarts实例的数据option的方式。我们可以通过创建echarts实例时的option中的series数组中对应的数据项进行修改。如下例所示,我们更新了第一个系列的第一个数据项的value的值。修改后的数据能够自动更新到图表中。


var option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'line'
    }]
};

// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

option.series[0].data[0] = 150; // 修改第一个系列的第一个数据项的值

myChart.setOption(option); // 更新图表

三、动态增加数据

动态增加数据是指在已有的数据集之上增加新的数据,而不是替换原有的数据集。我们可以通过调用setOption方法来实现动态增加数据。添加数据时,需要将新的数据添加到对应系列的data数组中。如下例所示,我们添加了一条新的线性数据到第一个系列的data数组末端。添加后的数据能够自动更新到图表中。


var option = {
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
        type: 'value'
    },
    series: [{
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'line'
    }]
};

// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

option.series[0].data.push(90); // 向第一个系列的data末尾添加一个数据

myChart.setOption(option); // 更新图表

四、异步加载数据

异步加载数据是指在数据加载完成之后,再将数据渲染到图表中。异步加载数据主要应用于处理大量数据或者需要对数据进行筛选处理的情况。我们可以使用异步加载数据源并处理数据后再渲染图表。具体实现可以使用echarts提供的ajax组件或者其他异步加载方式。如下例所示,我们使用了ajax组件加载数据源,然后对数据进行处理,最后将处理后的数据渲染到图表中。


$.get('data.json').done(function (data) {
    // 对数据进行处理
    var processedData = processData(data);

    var option = {
        xAxis: {
            type: 'category',
            data: processedData.categories
        },
        yAxis: {
            type: 'value'
        },
        series: [{
            data: processedData.data,
            type: 'line'
        }]
    };

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
});

五、基于时间轴更新数据

基于时间轴更新数据是指在图表已有基础上,根据时间轴变化来更新图表数据。我们可以使用echarts提供的时间轴组件对数据进行更新。可以使用时间轴组件提供的多种方式进行数据的更新,如单击时间点,拖动时间轴,自动播放等等。如下例所示,我们使用下方的时间轴对图表中的数据进行了更新。


var option = {
    baseOption: {
        timeline: {
            data: ['2014', '2015', '2016', '2017', '2018', '2019'],
            loop: false,
            autoPlay: false,
            currentIndex: 0,
            playInterval: 1000,
            controlStyle: {
                position: 'left'
            }
        },
        xAxis: {
            type: 'category',
            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
        },
        yAxis: {
            type: 'value'
        },
        series: [{
            data: [120, 200, 150, 80, 70, 110, 130],
            type: 'line',
            name: '2014'
        }, {
            data: [150, 220, 170, 90, 80, 120, 150],
            type: 'line',
            name: '2015'
        }, {
            data: [180, 230, 190, 100, 90, 130, 170],
            type: 'line',
            name: '2016'
        }]
    },
    options: [{
        title: {
            text: '2014年数据'
        },
        series: [{
            name: '2014'
        }]
    }, {
        title: {
            text: '2015年数据'
        },
        series: [{
            name: '2015'
        }]
    }, {
        title: {
            text: '2016年数据'
        },
        series: [{
            name: '2016'
        }]
    }]
};

// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);

myChart.on('timelinechanged', function (params) {
    var currentIndex = params.currentIndex;
    var series = option.baseOption.series;
    for (var i = 0, l = series.length; i < l; i++) {
        series[i].data = timelineData[currentIndex].data[i];
    }
    myChart.setOption(option);
});

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT