echarts中饼图的异步数据加载绘制

本文介绍如何在ECharts中实现饼图的异步数据加载与动态更新,包括配置项设置、数据格式化及具体实现代码。
ECharts 中实现异步数据的更新非常简单,在图表初始化后不管任何时候只要通过 jQuery 等工具异步获取数据后通过 setOption 填入数据和配置项就行,但是从后台异步获取数据后,需要在前台根据不同的图表拼接成相应图表data的数据格式,一般常用的图表有折现图,柱状图,饼图。这里说明饼图的使用方法。

饼图的数据和配置项如下

option = {
    title : {
        text: '某站点用户访问来源',
        subtext: '纯属虚构',
        x:'center'
    },
    tooltip : {
        trigger: 'item',
        formatter: "{a} <br/>{b} : {c} ({d}%)"
    },
    legend: {
        orient: 'vertical',
        left: 'left',
        data: ['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
    },
    series : [
        {
            name: '访问来源',
            type: 'pie',
            radius : '55%',
            center: ['50%', '60%'],
            data:[
                {value:335, name:'直接访问'},
                {value:310, name:'邮件营销'},
                {value:234, name:'联盟广告'},
                {value:135, name:'视频广告'},
                {value:1548, name:'搜索引擎'}
            ],
            itemStyle: {
                emphasis: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                }
            }
        }
    ]
};
其中配置项中的data需要从后台异步获取数据后填充进去,而我们从后台获取到了关于value和name的json数据

故在此我们需要拼接饼图中data的数据格式

data: result.degree    //legend里的data数据
data: (function(){
        var rs = [];
        for(var res in result.degree){
            rs.push({
                name :result.degree[res],
                value:result.count[res]
            });
        }
        return rs;
     })()
首次在页面加载时先加载图表的配置项,然后通过ajax请求异步请求数据,得到数据后再利用拼接完成的数据格式动态绘制饼图。

这是异步请求数据和动态加载饼图的完成代码

    $.ajax({
        type : "get",
        async : true,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)

        url : "此处为请求的url地址",    //请求发送到
        data : {},
        dataType : "json",        //返回数据形式为json

         success : function(result) { 
             myChart.setOption({        //填入数据
                legend: {
                    data: result.degree
                },
                series: [{
                    data: (function(){
                        var rs = [];
                        for(var res in result.degree){
                            rs.push({
                                name :result.degree[res],
                                value:result.count[res]
                            });
                        }
                        return rs;
                    })()
                }]
            });

             myChart.hideLoading();    //隐藏加载动画
        },
        error : function(errorMsg) {
            alert("图表请求数据失败!");
            myChart.hideLoading();
        }
    }) 

最后饼图成功的绘制

这里写图片描述

### 如何在 ECharts 中实现数据加载 为了实现在 ECharts加载数据,可以采用异步方式获取数据并动态更新表。下面是一个完整的例子来展示如何通过 JavaScript 和 HTML 来完成这一操作。 #### 准备工作环境 确保项目中已经引入了 `echarts` 库文件以及任何其他必要的依赖项,比如 jQuery 或者 Axios 用于发起 HTTP 请求。如果遇到没有浮动效果的问题,则可能是由于使用的 `echarts.simple.min.js` 版本过旧或存在 bug 所致[^1]。建议尝试升级到最新版本的 ECharts 库以获得更好的兼容性和功能支持。 #### 创建 DOM 容器 定义一个用来容纳表的 div 元素,在此案例中的 ID 是 `pieLeftEcharts`: ```html <div class="main"> <div class="con"> <div class="left"> <div class="contain"> <div class="pie1" id="pieLeftEcharts"></div> </div> </div> </div> </div> ``` #### 初始化表实例 当页面加载完成后初始化 ECharts 实例,并设置初始配置选项为空数组或其他默认值以便稍后填充实际数据: ```javascript // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('pieLeftEcharts')); option = { title : { text: '某站点用户访问来源', subtext: '', x:'center' }, tooltip : { trigger: 'item', formatter: "{a} <br/>{b} : {c} ({d}%)" }, legend: { orient: 'vertical', left: 'left', data: [] }, series : [ { name: '访问来源', type: 'pie', radius : '55%', center: ['50%', '60%'], data:[], itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }; myChart.setOption(option); ``` #### 加载远程数据源 使用 AJAX 技术或者其他适合的方式从服务器端拉取最新的统计数据,并将其转换成符合 ECharts 要求的对象结构之后再调用 `setOption()` 方法刷新视显示新的内容。这里假设有一个 JSON API 返回如下格式的结果集: ```json [ {"value":335,"name":"直接访问"}, {"value":310,"name":"邮件营销"}, {"value":234,"name":"联盟广告"}, {"value":135,"name":"视频广告"}, {"value":1548,"name":"搜索引擎"} ] ``` 可以通过以下代码片段模拟这样的过程: ```javascript $.get('/api/data', function (data) { var pieData = []; $.each(data, function(index, obj){ pieData.push({ value:obj.value, name:obj.name }); }); option.legend.data = data.map(function(item){return item.name}); option.series[0].data = pieData; myChart.setOption(option); },'json'); ``` 上述方法展示了如何利用 ECharts 进行绘制的同时实现了异步加载外部数据的功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值