百度echart如何动态生成图表

百度echart如何动态生成图表

一、总结

一句话总结:

clear hideloading setOption

主要是下面三行代码:

myChart.clear(); //清空画布
myChart.hideLoading(); //加载动画效果
myChart.setOption(option); //设置配置项和数据

第一个是在每一次绘制图标前,做一次初始化,清空画布,目的是为了防止数据没有清理干净,会存在缓存或者什么。这样会影响绘图效果。

第二个是图片绘制的时候一个类似加载的动画效果。还有个myChart.showLoading();

第三个是绘制!相当于调用所有的配置,开始绘制。上边的容器,数据的写入,都是为了准备,而myChart.setOption();才是真正的绘制,使用刚指定的配置项和数据显示图表。

 

1、echart如何实现数据的动态赋值?

php json js
php js

推荐使用第一种方法,不推荐使用第二种方法,第一种方法可动态显示,代码解耦也比较好看和清晰,也不容易错

方法一:操作js对象进行赋值(php-->json-->js)
 1     for(var i= 0,len=data.object[0].length;i<len;i++){
 2         var json={};
 3         var data2=data.object[0];
 4         json.name=data.object[0][i];
 5         json.value=data.object[1][i];
 6         option.series[0].data[i]=json;
 7         option.legend.data=data.object[0];
 8         option2.xAxis[0].data=data.object[0];
 9         option2.series[0].data=data.object[1];
10     }

 

方法二:直接php来赋值(php-->js)

比如里面的39行的json_encode直接解析php对象$option_data

39 data: {:json_encode($option_data['xAxis_data']);},

还比如58行的thinkphp中的volist标签。

58 {volist name="$option_data['series_data']" id="vo"}

 1 <!----------表格資料顯示---------->
 2 <script type="text/javascript">
 3     // 基於準備好的dom,初始化echarts實例
 4     var $=jQuery;
 5     var ar_table_id='my_bar_table_{$ar_table_id}';
 6     //console.log(ar_table_id);
 7     var width=$('.myData').width();
 8     $('#'+ar_table_id).css({
 9         'width':width,
10         'height':'400px',
11     });
12     var myChart = echarts.init(document.getElementById(ar_table_id));
13 
14     // 指定圖表的配置項和資料
15     option = {
16         tooltip: {
17             trigger: 'axis',
18             axisPointer: {
19                 type: 'cross',
20                 crossStyle: {
21                     color: '#999'
22                 }
23             }
24         },
25         toolbox: {
26             feature: {
27                 dataView: {show: true, readOnly: false},
28                 magicType: {show: true, type: ['line', 'bar']},
29                 restore: {show: true},
30                 saveAsImage: {show: true}
31             }
32         },
33         legend: {
34             data:{:json_encode($option_data['legend_data']);}
35         },
36         xAxis: [
37             {
38                 type: 'category',
39                 data: {:json_encode($option_data['xAxis_data']);},
40                 axisPointer: {
41                     type: 'shadow'
42                 }
43             }
44         ],
45         yAxis: [
46             {
47                 type: 'value',
48                 name: '高度(mm)',
49                 min: 0,
50                 max: {$option_data['yAxis_data']['max']},
51                 interval: {php}echo $option_data['yAxis_data']['max']/5;{/php},
52                 axisLabel: {
53                     formatter: '{value}'
54                 }
55             }
56         ],
57         series: [
58             {volist name="$option_data['series_data']" id="vo"}
59             {
60                 name:'{$vo["name"]}',
61                 type:'line',
62                 data:{:json_encode($vo['data']);}
63             },
64             {/volist}
65         ]
66     };
67 
68     // 使用剛指定的配置項和資料顯示圖表。
69     myChart.setOption(option);
70 </script>

 

2、echart如何实现动态显示数据的常见出错点?

去键 array_values()

echar的数组要值的时候只要值,不要键,而在php里面的数组我们一般都有键,所以要做去键操作

//要把xAxis_data從鍵值對數組變成數組
$option_data['xAxis_data']=array_values($option_data['xAxis_data']);

 

 

3、echart如何实现动态显示数据?

clear hideloading setOption

主要是下面三行代码:

myChart.clear(); //清空画布
myChart.hideLoading(); //加载动画效果
myChart.setOption(option); //设置配置项和数据

第一个是在每一次绘制图标前,做一次初始化,清空画布,目的是为了防止数据没有清理干净,会存在缓存或者什么。这样会影响绘图效果。

第二个是图片绘制的时候一个类似加载的动画效果。还有个myChart.showLoading();

第三个是绘制!相当于调用所有的配置,开始绘制。上边的容器,数据的写入,都是为了准备,而myChart.setOption();才是真正的绘制,使用刚指定的配置项和数据显示图表。

 

 

具体实例:

普通的数据。我们比方说,在后台拿到的就是这么一串json、接下来就是如何解析,并且放入图表绘制的方法中。

{"result":1,"msg":null,"object":[["网站","微博","微信","论坛","新闻","政务","报刊"],[10,20,180,995,450,250,360]],"totalPage":0,"sum":0}

 

我们需要先做请求。

 

 $.ajax({
        type: "get",
        async: true, //同步执行
        url: "tets.json", dataType: "json", //返回数据形式为json success: function(data){ console.log(data.object[0].length); for(var i= 0,len=data.object[0].length;i<len;i++){ var json={}; var data2=data.object[0]; json.name=data.object[0][i]; json.value=data.object[1][i]; option.series[0].data[i]=json; option.legend.data=data.object[0]; option2.xAxis[0].data=data.object[0]; option2.series[0].data=data.object[1]; } myChart.clear(); myChart.hideLoading(); myChart.setOption(option); myChart2.clear(); myChart2.hideLoading(); myChart2.setOption(option2);// 使用刚指定的配置项和数据显示图表。  }, error: function(errorMsg) { alert("图表请求数据失败啦!"); } });

 

其中的url是我们请求数据的接口,当我们请求到数据之后,对数据进行遍历。大家可能看到我在其中定义了一个对象,因为我们根据请求到的数据来看,并不太符合我们的要求,所以我们需要进行数据的转换。

详细的不再多说,自己参考。

我们来说说myChart.clear();myChart.hideLoading();myChart.setOption(option);

第一个是在每一次绘制图标前,做一次初始化,清空画布,目的是为了防止数据没有清理干净,会存在缓存或者什么。这样会影响绘图效果。

第二个是图片绘制的时候一个类似加载的动画效果。还有个myChart.showLoading();

第三个是绘制!相当于调用所有的配置,开始绘制。上边的容器,数据的写入,都是为了准备,而myChart.setOption();才是真正的绘制,使用刚指定的配置项和数据显示图表。

 

4、官方参考文档地址?

ECharts · Doc
http://echarts.baidu.com/echarts2/doc/doc.html#Option

 

5、echart里面的每一个小组件不仅可以修改数据,并且都可以修改位置?

样式

组件可以修改位置,我们就非常方便的控制样式

下面是tolbox样式修改(摘自官方文档):

{string} orient'horizontal'布局方式,默认为水平布局,可选为:'horizontal' | 'vertical'
{string | number} x'right'水平安放位置,默认为全图居中,可选为:'center' | 'left' | 'right' | {number}(x坐标,单位px)
{string | number} y'top'垂直安放位置,默认为全图顶端,可选为:'top' | 'bottom' | 'center' | {number}(y坐标,单位px)
{color}backgroundColor'rgba(0,0,0,0)'工具箱背景颜色,默认透明
{color}borderColor'#ccc'工具箱边框颜色
{number}borderWidth0工具箱边框线宽,单位px,默认为0(无边框)
{number | Array}padding5工具箱内边距,单位px,默认各方向内边距为5,接受数组分别设定上右下左边距,同css,见下图
{number}itemGap10各个item之间的间隔,单位px,默认为10,横向布局时为水平间隔,纵向布局时为纵向间隔,见下图
{number}itemSize16工具箱icon大小,单位(px)

 

6、官方文档里面对每一个名词都有详细解释?

易懂

基本名词

名词描述
chart是指一个完整的图表,如折线图,饼图等“基本”图表类型或由基本图表组合而成的“混搭”图表,可能包括坐标轴、图例等
axis直角坐标系中的一个坐标轴,坐标轴可分为类目型、数值型或时间型
xAxis直角坐标系中的横轴,通常并默认为类目型
yAxis直角坐标系中的纵轴,通常并默认为数值型
grid直角坐标系中除坐标轴外的绘图网格,用于定义直角系整体布局
legend图例,表述数据和图形的关联
dataRange值域选择,常用于展现地域数据时选择值域范围
dataZoom数据区域缩放,常用于展现大量数据时选择可视范围
roamController缩放漫游组件,搭配地图使用
toolbox辅助工具箱,辅助功能,如添加标线,框选缩放等
tooltip气泡提示框,常用于展现更详细的数据
timeline时间轴,常用于展现同一系列数据在时间维度上的多份数据
series数据系列,一个图表可能包含多个系列,每一个系列可能包含多个数据

 

7、echart的底层绘图库Canvas类库ZRender时什么?

二维绘图引擎

ZRender 是二维绘图引擎,它提供 Canvas、SVG、VML 等多种渲染方式。ZRender 也是 ECharts 的渲染器。

ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。

 

 

二、百度echart使用心得,百度图表

百度echart算是百度针对数据展示做的一个图表插件吧,一般我们使用都不是问题,主要还是对于对动态数据的解析。我这里使用饼状图,和柱状图为例:

首先,我们需要定义一个绘图的容器:(class是我自己定义的,这个容器用一个div就可以)

<div class="fm_box pd-10 border-grey" id="shanxing" style="height: 500px;"></div>

 

  <div class="fm_box pd-10 border-grey" id="zhuzhuang" style="height: 500px;"></div>

然后需要引入我们的echart.min.js.

准备工作做好后,下面就是我们初始化图表的时候了。

首先我们需要定义两个mychart分别作为我们的扇形图和柱状图

var myChart = echarts.init(document.getElementById('shanxing'));
var myChart2 = echarts.init(document.getElementById('zhuzhuang'));

然后分别定义option:就是数据格式的写入:(这里因为有两个图,数据分别用option ,option2来表示)

 option = {
        title : {
            text: '某站点用户访问来源',
            x:'center'
        },
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient : 'vertical',
            x : 'left',
            data:[]
//            '直接访问','邮件营销','联盟广告','视频广告','搜索引擎'
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {
                    show: true,
                    type: ['pie', 'funnel'],
                    option: {
                        funnel: {
                            x: '25%',
                            width: '50%',
                            funnelAlign: 'left',
                            max: 1548
                        }
                    }
                },
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        calculable : true,
        series : [
            {
                name:'访问来源',
                type:'pie',
                radius : '55%',
                center: ['50%', '55%'],
                data:[
//                    {value:335, name:'直接访问'},
//                    {value:310, name:'邮件营销'},
//                    {value:234, name:'联盟广告'},
//                    {value:135, name:'视频广告'},
//                    {value:1548, name:'搜索引擎'}
                ]
            }
        ]
    };
    option2 = {
        title : {
            text: '某地区蒸发量和降水量',
            subtext: '纯属虚构'
        },
        tooltip : {
            trigger: 'axis'
        },
        legend: {
            data:['项目数']
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {show: true, type: ['line', 'bar']},
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        calculable : true,
        xAxis : [
            {
                type : 'category',
                data : []
            }
        ],
        yAxis : [
            {
                type : 'value'
            }
        ],
        series : [
            {
                name:'项目',
                type:'bar',
                data:[],

            }

        ]
    };

 

大家可以看到,我把series里面的data注释掉,或者删除了,因为图表我们一般用来展示动态数据,监控数据变化,固定的图表就没有我写这个博文的意义了。

好的接下来,我们模拟一个json文件。用作我们的数据。很简单的数据格式。

{"result":1,"msg":null,"object":[["网站","微博","微信","论坛","新闻","政务","报刊"],[10,20,180,995,450,250,360]],"totalPage":0,"sum":0}

这个json是一个普通的数据。我们比方说,在后台拿到的就是这么一串json、接下来就是如何解析,并且放入图表绘制的方法中。

 

我们需要先做请求。

 

 $.ajax({
        type: "get",
        async: true, //同步执行
        url: "tets.json",
        dataType: "json", //返回数据形式为json
        success: function(data){
            console.log(data.object[0].length);
            for(var i= 0,len=data.object[0].length;i<len;i++){
                var json={};
                var data2=data.object[0];
                json.name=data.object[0][i];
                json.value=data.object[1][i];
                option.series[0].data[i]=json;
                option.legend.data=data.object[0];
                option2.xAxis[0].data=data.object[0];
                option2.series[0].data=data.object[1];
            }
            myChart.clear();
            myChart.hideLoading();
            myChart.setOption(option);
            myChart2.clear();
            myChart2.hideLoading();
            myChart2.setOption(option2);// 使用刚指定的配置项和数据显示图表。
        },
        error: function(errorMsg) {
            alert("图表请求数据失败啦!");
        }
    });

 

其中的url是我们请求数据的接口,当我们请求到数据之后,对数据进行遍历。大家可能看到我在其中定义了一个对象,因为我们根据请求到的数据来看,并不太符合我们的要求,所以我们需要进行数据的转换。

详细的不再多说,自己参考。

我们来说说myChart.clear();myChart.hideLoading();myChart.setOption(option);

第一个是在每一次绘制图标前,做一次初始化,清空画布,目的是为了防止数据没有清理干净,会存在缓存或者什么。这样会影响绘图效果。

第二个是图片绘制的时候一个类似加载的动画效果。还有个myChart.showLoading();

第三个是绘制!相当于调用所有的配置,开始绘制。上边的容器,数据的写入,都是为了准备,而myChart.setOption();才是真正的绘制,使用刚指定的配置项和数据显示图表。

 

 

下边是除了容器,配置的完整代码:

    //echart

    var myChart = echarts.init(document.getElementById('qinggan'));
    var myChart2 = echarts.init(document.getElementById('bar'));
    option = {
        title : {
            text: '某站点用户访问来源',
            x:'center'
        },
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient : 'vertical',
            x : 'left',
            data:[]
//            '直接访问','邮件营销','联盟广告','视频广告','搜索引擎'
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {
                    show: true,
                    type: ['pie', 'funnel'],
                    option: {
                        funnel: {
                            x: '25%',
                            width: '50%',
                            funnelAlign: 'left',
                            max: 1548
                        }
                    }
                },
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        calculable : true,
        series : [
            {
                name:'访问来源',
                type:'pie',
                radius : '55%',
                center: ['50%', '55%'],
                data:[
//                    {value:335, name:'直接访问'},
//                    {value:310, name:'邮件营销'},
//                    {value:234, name:'联盟广告'},
//                    {value:135, name:'视频广告'},
//                    {value:1548, name:'搜索引擎'}
                ]
            }
        ]
    };
    myChart.hideLoading();
    myChart.setOption(option);

    option2 = {
        title : {
            text: '某地区蒸发量和降水量',
            subtext: '纯属虚构'
        },
        tooltip : {
            trigger: 'axis'
        },
        legend: {
            data:['项目数']
        },
        toolbox: {
            show : true,
            feature : {
                mark : {show: true},
                dataView : {show: true, readOnly: false},
                magicType : {show: true, type: ['line', 'bar']},
                restore : {show: true},
                saveAsImage : {show: true}
            }
        },
        calculable : true,
        xAxis : [
            {
                type : 'category',
                data : []
            }
        ],
        yAxis : [
            {
                type : 'value'
            }
        ],
        series : [
            {
                name:'项目',
                type:'bar',
                data:[],

            }

        ]
    };
    //情感分析图
    $.ajax({
        type: "get",
        async: true, //同步执行
        url: "tets.json",
        dataType: "json", //返回数据形式为json
        success: function(data){
            console.log(data.object[0].length);
            for(var i= 0,len=data.object[0].length;i<len;i++){
                var json={};
                var data2=data.object[0];
                json.name=data.object[0][i];
                json.value=data.object[1][i];
                option.series[0].data[i]=json;
                option.legend.data=data.object[0];
                option2.xAxis[0].data=data.object[0];
                option2.series[0].data=data.object[1];
            }
            myChart.clear();
            myChart.hideLoading();
            myChart.setOption(option);
            myChart2.clear();
            myChart2.hideLoading();
            myChart2.setOption(option2);// 使用刚指定的配置项和数据显示图表。
        },
        error: function(errorMsg) {
            alert("图表请求数据失败啦!");
        }
    });

好了,基本就是这些,重点不是在显示,是在你如何解析接收到的后台数据,进行数据的配置。

这里才是重点,如果你只是写个假数据,做个写死的图表。

那我就不说什么了,祝你使用愉快~

 

参考:百度echart使用心得,百度图表。 - xiuber - 博客园
https://www.cnblogs.com/xiuber/p/5984814.html

 

 

三、百度echart简介

官方参考文档地址:ECharts · Doc
http://echarts.baidu.com/echarts2/doc/doc.html#Option

 

ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。

支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)、雷达图(填充雷达图)、和弦图、力导向布局图、地图、仪表盘、漏斗图、事件河流图等12类图表,同时提供标题,详情气泡、图例、值域、数据区域、时间轴、工具箱等7个可交互组件,支持多图表、组件的联动和混搭展现。

 

 

 

 

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值