博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
echarts 应用数个样例
阅读量:5739 次
发布时间:2019-06-18

本文共 15680 字,大约阅读时间需要 52 分钟。

  • 应用一:环形图和饼图嵌套

先说明一下内部文件分布:

注意输入数组的格式(不是一般Javascript 的数组格式,而是有点像json 的样子),代码例如以下:

profiles_pie_weibo:function(event_id){		heats=[{name:'直达', value:335},{name:'营销广告', value:679},{name:'搜索引擎', value:1548}];		heats2 = [{name:'直达', value:335},{name:'邮件营销', value:310},{name:'联盟广告', value:234},{name:'视频广告', value:135},		{name:'百度', value:1048},{name:'谷歌', value:251},{name:'必应', value:147},{name:'谷歌', value:102}];		        // echarts库文件路径配置        require.config({            paths: {                echarts: $base.appConfig.lib_scripts_path + '/echarts/'            }        });                // 使用图表        require(            [                'echarts',                'echarts/chart/pie'            ],            function (ec) {                // 基于准备好的dom,初始化echarts图表                var myChart = ec.init(document.getElementById('profiles_layout'));        		var option = {					tooltip : {					//鼠标hover时提示					    trigger: 'item',					    formatter: "{a} 
{b} : {c} ({d}%)" }, series: [ { name: '訪问来源', type:'pie', radius: [0,'35%'], //内部饼图 itemStyle : { normal : { label : { position : 'inner' }, labelLine : { show : false } } }, data: heats }, { name: '訪问来源2', type:'pie', radius: ['50%','70%'], //数组形式,环形图 data: heats2 } ] }; // 为echarts对象载入数据 myChart.setOption(option); } );//======end require======= },

出来的效果图:

另:应用function到tooltips的样例:

tooltip : {										trigger: 'item',										formatter: function (params,ticket,callback) {											if ('titles' == params.seriesName) {												return "职位: " + params.name + ",个数:" + params.value;											} else											if ('names' == params.seriesName) {												return "姓名: " + params.name;											}										}

series : [									          {									        	  name:'titles',									        	  type:'pie',								                     radius: [0,'35%'], //内部饼图								                     itemStyle : {								                          normal : {								                              label : {								                            	  show: false,								                                  position : 'inner'								                              },								                              labelLine : {								                                  show : false								                              }								                          }								                     },								                     data:  titles								                    },								                    {  								                     name: 'names',								                     type:'pie',								                     radius: ['50%','70%'], //数组形式,环形图								                     data:  names								                    }									          ]

效果图(内圈 tooltips):

(外圈 tooltips):

  • 应用二:SVG扩展-人体图(人物画像/用户画像的简化版)

这个东西代码不难,但那个SVG底图的相应代码起着关键的影响,所以搞这个之前最好学一点SVG代码编写规则。好吧。做echarts SVG扩展的人还是比較少的,网上差点儿找不到多少直接相关资料,仅仅能自己摸弄着过河了~

代码(有一点点无用代码。不影响阅读):

//人物画像	profiles_weibo_3:function(event_id){		// echarts库文件路径配置        require.config({            paths: {                echarts: $base.appConfig.lib_scripts_path + '/echarts/'            }        });        // 使用图表        require(            [                'echarts',                'echarts/chart/map'            ],	        function (ec) {	            // 基于准备好的dom,初始化echarts图表	            var myChart = ec.init(document.getElementById('profiles_layout')); 	            	            // 自己定义扩展图表类型:mapType = body		        require('echarts/util/mapData/params').params.bodyMale = {		            getGeoJson: function (callback) {		                $.ajax({		                    url: $base.appConfig.lib_scripts_path + "/echarts/svg/raw_man.svg",		                    dataType: 'xml',		                    success: function(xml) {		                        callback(xml);		                    },		                	error:function(XMLResponse){		                		alert(XMLResponse.responseText);		                	}		                });		            }		        };				var option = {						title : {					        text : '人体password',					        subtext: '地图SVG扩展',					        x:'center'					    },					    tooltip : {					        trigger: 'item'					    },					    dataRange: {					        min: 0,					        max: 100,					        x: 'center',					        y: 'center',					        calculable : true,					        itemHeight:30,					        color: ['orangered','yellow','lightskyblue']					    },					    series : [					              {					                  name: '人体password-男',					                  type: 'map',					                  mapType: 'bodyMale', // 自己定义扩展图表类型					                  mapLocation: {					                      x:'left'					                  },					                  roam:true,					                  itemStyle:{					                      normal:{label:{show:true}},					                      emphasis:{label:{show:true}}					                  },					                  data:[					                      {name: 'head', value: 90},					                      {name: 'body', value: 60},					                      {name: 'left_hand', value: 70},					                      {name: 'right_hand', value: 50},					                      {name: 'left_leg', value: 40},					                      {name: 'right_leg', value: 30},					                      {name: 'bag', value: 90}					                  ],					                  markLine : {					                      smooth:true,					                      effect : {					                          show: true,					                          scaleSize: 1,					                          period: 30,					                          color: '#fff',					                          shadowBlur: 5					                      },							                      data : [					                          [					                              {name:'男',geoCoord:[138, 126]}, 					                              {name:'女',value:90,geoCoord:[268, 56]}					                          ]					                      ]					                  }					              }					              ]//======end series=======					};				myChart.setOption(option);            }        );//======end require=======	},
效果图:

SVG Reference:

echarts sample:http://echarts.baidu.com/doc/example/map16.html?qq-pf-to=pcqq.c2c

echarts sample 中用到的SVG文件:https://code.csdn.net/u013476464/baidu_data_visualization/tree/master/doc/example/svg/body-male.svg

SVG扩展其它样例:http://www.oschina.net/code/piece_full?code=38878

SVG在线编辑:http://editor.method.ac/

SVG 学习:http://www.w3cplus.com/html5/svg-transformations.html,http://www.tuicool.com/articles/yUZz2mu

上面的样例用到我做的SVG文件。

仅仅是图片编辑工具是不够的,还须要改动里面的代码。另外,stroke 和fill 是不能加在须要作色彩变化的项上的。不然dataRange中的着色会不成功。代码例如以下:

xml version="1.0"?> <svg width="232" height="336" xmlns="http://www.w3.org/2000/svg"> <!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ --> <g> <title>background</title> <rect fill="#fff" id="canvas_background" height="338" width="234" y="-1" x="-1"/> <g display="none" overflow="visible" y="0" x="0" height="100%" width="100%" id="canvasGrid"> <!-- <rect fill="url(#gridpattern)" stroke-width="0" y="0" x="0" height="100%" width="100%"/>--> </g> </g> <g> <title>Layer 1</title> <ellipse name="head" ry="39.5" rx="39" id="svg_1" cy="51" cx="116.5" stroke-width="1.5"/> <ellipse name="body" ry="66" rx="15" id="svg_2" cy="158.5" cx="116.5" stroke-width="1.5"/> <ellipse name="right_leg" ry="37.5" rx="10" id="svg_3" cy="268" cx="95.5" stroke-width="1.5"/> <ellipse name="left_leg" ry="48" rx="9.5" id="svg_4" cy="270.5" cx="144" stroke-width="1.5"/> <ellipse name="right_hand" ry="8.5" rx="41.5" id="svg_5" cy="144" cx="53" stroke-width="1.5"/> <ellipse name="left_hand" ry="9" rx="40.5" id="svg_6" cy="142.5" cx="187" stroke-width="1.5"/> <path id="svg_8" d="m91.5,43.5c12,2 18,-3 18,-3c0,0 -30,1 -18,3z" fill-opacity="null" stroke-opacity="null" stroke-width="1.5" stroke="#000" fill="#fff"/> <path id="svg_9" d="m127.5,39.5c15,4 15,3 14.5,2.5c0.5,0.5 -29.5,-6.5 -14.5,-2.5z" fill-opacity="null" stroke-opacity="null" stroke-width="1.5" stroke="#000" fill="#fff"/> <path id="svg_10" d="m99.5,68.5c0,-1 15,11 14.5,10.5c0.5,0.5 18.5,-9.5 18,-10" fill-opacity="null" stroke-opacity="null" stroke-width="1.5" stroke="#000" fill="#fff"/> <path id="svg_11" name="bag" d="m22.5,161.5c-10,17 -11,61 -11.5,60.5c0.5,0.5 14.5,28.5 14,28c0.5,0.5 13.5,-25.5 13,-26l-15.5,-62.5z"/> </g> </svg>

  • 应用三:等级金字塔图

内含图中节点点击事件样例

var bandTitleList=data.bandTitleList;    		var bands = new Array();    		    		if(bandTitleList && bandTitleList.length > 0){    			$.each(bandTitleList, function(i, item){    				bands.push({value:item.band, name: item.title});    			});    			// echarts库文件路径配置    	        require.config({    	            paths: {    	                echarts: $base.appConfig.lib_scripts_path + '/echarts/'    	            }    	        });				//绘制表    			require(		           [		            	'echarts',		            	'echarts/chart/funnel'		           ],		           function (ec) {		               // 基于准备好的dom,初始化echarts图表		               var myChart = ec.init(document.getElementById('bands_chart'));		               var option = {		    				title : {		    			        text: '级别图'		    			    },		    			    tooltip : {		    			        trigger: 'item',		    			        formatter: "{b}"		    			    },		    			    series : [		    			        {		    			            name:'级别',		    			            type:'funnel',		    						x2:'50%',		    			            sort : 'ascending',		    			            data: bands//		    			            [{value:20, name:'订单,订单2'}, {value:100, name:'展现'}]		    			        }		    			    ]		    			};		               	myChart.setOption(option);		               			               	var ecConfig = require('echarts/config');						// 实现节点点击事件						function focus(param) {							var data = param.data;							// 推断节点的相关数据是否正确							if (data != null && data != undefined) {								if (data.value != null && data.value != undefined) {									//弹出每一级包含的人员									$biosMain.showNamesByBand(name, data.value);								}																}						}						// 绑定图表节点的点击事件						myChart.on(ecConfig.EVENT.CLICK, focus);		           }    			);//======end require=======    			    			// first run    			if (bands.length > 0) {    				$biosMain.showNamesByBand(name, bands[0].value);    			}    		}else{    			$("#bands_chart").html("
  • "+$.language.getText('WEIBO_NO_DATA')+"
  • "); }
    效果图:

    • 应用四:树形图(勉强也可作组织结构图)

    1)数据source 订制

    			var titleNameList=data.titleNameList;			var lvl_3 = new Array();			var lvl_2 = new Array();			var lvl_1 = new Array();			var preTitle = "";						if(bandTitleList){				$.each(titleNameList, function(i, item){					if (preTitle != "" && preTitle != item.title) {								// group by title						lvl_2.push({name:preTitle, value:20, children:lvl_3, level:2});	// custom label: level						lvl_3 = [];					}					preTitle = item.title;					lvl_3.push({name:item.name, value:20, level:3, itemStyle: {normal: {color: '#cc9999', label: {position: 'right'}}}});				});				lvl_1.push({name:"", value:20, children:lvl_2, level:1, itemStyle: {normal: {color: '#cc6666'}}});

     

    2)option

    //绘制表				require(						[						 'echarts',						 'echarts/chart/tree'						 ],						 function (ec) {							// 基于准备好的dom,初始化echarts图表							var myChart = ec.init(document.getElementById('names_chart'));							var option = {									title : {										text: '级别相应人员图'									},									tooltip : {										trigger: 'item',										formatter: function (params,ticket,callback) {											if (3 == params.data.level) {												return "姓名: " + params.data.name;											} else											if (2 == params.data.level) {												return "职位: " + params.data.name;											} else											if (1 == params.data.level) {												return "band";											}										}//										{b}	// for testing									},									series : [											{											    type:'tree',											    name : "Force tree",											    orient : "horizontal",											    rootLocation : {x:'20%',y:'top'},											    layerPadding : 160,											    nodePadding : 23,											    roam : true,											    itemStyle: {											        normal: {											            label: {											                show: true											            },											            nodeStyle : {											                brushType : 'both',											                strokeColor : 'rgba(255,215,0,0.6)',											                lineWidth : 1											            }											        }											    },											    data : lvl_1											}									]							};							myChart.setOption(option);						}				);//======end require=======
    3)效果图

    经验:假设不出图又不报错。有可能是由于echarts js 之间不同版本号所造成。能够用src版的echarts 追踪进原码确定。我就试过tree 不出图。原因是用了新版的tree.js。旧版的echarts.js。

    • 应用五:堆积条形图

    option = {    title : {        text: '通过情况分析',        x:'center'    },    tooltip : {        trigger: 'axis',        axisPointer : {            // 坐标轴指示器,坐标轴触发有效            type : 'shadow'        // 默觉得直线,可选为:'line' | 'shadow'        }    },    legend: {        data:['不通过', '通过'],      	x : 'left'    },    toolbox: {        show : true,        feature : {            mark : {show: true},            dataView : {show: true, readOnly: false},            magicType : {show: true, type: ['line', 'bar', 'stack', 'tiled']},            restore : {show: true},            saveAsImage : {show: true}        }    },    calculable : true,    xAxis : [        {            type : 'value'        }    ],    yAxis : [        {            type : 'category',            data : ['分期2','分期3','分期4','分期5','分期6', '贷1','贷2','贷3']        }    ],    series : [        {            name:'不通过',            type:'bar',            stack: '总量',            itemStyle : { normal: {label : {show: true, position: 'insideRight'}}},            data:[20, 117, 5, 4, 44, 22, 9, 63]        },        {            name:'通过',            type:'bar',            stack: '总量',            itemStyle : { normal: {label : {show: true, position: 'insideRight'}}},            data:[19, 91, 4, 2, 27, 12, 13, 57]        }    ]};

    效果:
    http://echarts.baidu.com/doc/example/bar4.html

    • 应用六:饼图(最普通也最经常使用)
    option = {    title : {        text: '拒绝情况分析',        x:'center',      	textStyle: {fontSize: 24}    },    tooltip : {        trigger: 'item',        formatter: "{a} 
    {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, color:['#CC99FF','#FF9966','#9999FF'], series : [ { type:'pie', radius : '55%', center: ['50%', '60%'], itemStyle : { normal: { label : {textStyle: {fontSize: 16},show: true, formatter: '{b}: {d}%'}}}, data:[ {value:335, name:'客户原因'}, {value:310, name:'其它原因'}, {value:234, name:'综合推断'} ] } ]};
    效果:
    http://echarts.baidu.com/doc/example/pie1.html

    你可能感兴趣的文章
    卷积神经网络之原理详解
    查看>>
    树四:从上往下打印二叉树
    查看>>
    C#常用代码片段备忘
    查看>>
    WebView与 JS 交互方式
    查看>>
    课后作业:使用静态变量和构造方法追寻类所创建对象的数目
    查看>>
    java运行UnsupportedClassVersionError解决方案
    查看>>
    windows下使用emacs+plink远程编辑erlang文件
    查看>>
    Python全栈开发day4
    查看>>
    2018省赛模拟赛1(2017浙江省赛)
    查看>>
    使用golang求出A-Z的所有子集
    查看>>
    20172303 2017-2018-2《程序设计与数据结构》课程总结
    查看>>
    PHP中MySql函数收集
    查看>>
    apt-get常用命令
    查看>>
    javascript:with的用法以及延长作用域链
    查看>>
    CentOS使用dnf安装Redis
    查看>>
    wdcp centos6.5多网站部署
    查看>>
    nyoj组合数
    查看>>
    示例在同一台机器上使用RMAN克隆数据库
    查看>>
    [转]Oracle版本号解释
    查看>>
    HTML元素类型
    查看>>