关于echarts的那些事(地图标点,折线图,饼图)
前记:离上一篇博客的发布已经过去两个月了,这期间总想写点什么,却怎么都写不出来,一直拖到了现在。现在的感觉,不是像这期间一样,想好好整理一番,写一篇好博客,却写不出来。事实发现,随心就好,较好的博客,需要深入的技术,现在能力还不够,只能把所遇到的问题写出来,整理一下就好。周五了,一天过去了一半,利用闲下来的时间,把这些天遇到的问题整理一下吧。
一、地图标点(以青岛地图为例)
地图标点有两种方法(两种地图的展现方式)
准备工作:
- 下载echarts文件。(下载地址:http://echarts.baidu.com/download.html)
注意:建议下载完整包,不要自己构建。因为地图要跟冒泡图结合,有些需要东西,自己也不清楚,下个完整包就可以了。
- 青岛地图下载 (下载地址:http://ecomfe.github.io/echarts-map-tool/ 可以自己构建全国各省市地图)
上图给出两种构建地图的方法,特别注意的是引入json数据的时候,使用chrome打开的时候需要搭配跨域环境,请参考以前写的文章 http://www.cnblogs.com/wlpower/p/6370377.html,强调一点,如果方案一实现不了,可以根据这个方法 :
版本号49之后的chrome跨域设置
chrome的版本升到49之后,跨域设置比以前严格了,在打开命令上加–disable-web-security之后还需要给出新的用户个人信息的目录。众所周知chrome是需要用gmail地址登录的浏览器,登录后就会生成一个存储个人信息的目录,保存用户的收藏、历史记录等个人信息。49版本之后,如果设置chrome浏览器为支持跨域模式,需要指定出一个个人信息目录,而不能使用默认的目录,估计是chrome浏览器怕用户勿使用跨域模式泄露自己的个人信息(主要是cookie,很多网站的登录token信息都是保存在cookie里)。
具体做法为:
1.在电脑上新建一个目录,例如:C:\MyChromeDevUserData
2.在属性页面中的目标输入框里加上 –disable-web-security –user-data-dir=C:\MyChromeDevUserData,–user-data-dir的值就是刚才新建的目录。
3.点击应用和确定后关闭属性页面,并打开chrome浏览器。
再次打开chrome,发现有“–disable-web-security”相关的提示,说明chrome又能正常跨域工作了。
- 标点坐标数据
如果是少数标点,可以到百度地图ApI坐标拾取器查找。
如果是很多个,比如这些:
要是有坐标文件,就很方便,要是没有,只能一个一个找,四千八百多个坐标,我跟我另个同事找了好几天。。。
然后就是Excel表格数据转变成我们需要的格式:
有多种方法,一是:网上有在线Excel转换json格式,可以自动转换,只是坐标数据转换不是所需要的格式。另外的呢,可以跟后端沟通,把Excel上传数据库,然后以json格式传出来。(这些数据困扰了我一天多。。。)
准备工作已经好了,接下来开始页面内容:
1 <!DOCTYPE html> 2 <html style="height: 100%"> 3 <head> 4 <meta charset="utf-8"> 5 <script type="text/javascript" src="js/echarts.min.js"></script> 6 <script type="text/javascript" src="js/qingdao.js"></script> 7 <script type="text/javascript" src="js/mpda.js"></script> 8 <script type="text/javascript" src="js/geo.js"></script> 9 <script type="text/javascript" src="js/jquery-3.1.1.min.js"></script> 10 </head> 11 <body style="height: 100%; margin: 0"> 12 <div id="main" style="height: 800px"></div> 13 <br> 14 <script type="text/javascript"> 15 var chart = echarts.init(document.getElementById(\'main\')); 16 17 //因为数据比较多,这里只是举例参考 18 var data = [ 19 {"name":"青岛威达体育用品有限公司","value":"1000.00"}, 20 {"name":"青岛万福食品有限公司","value":"1804.76"}, 21 {"name":"青岛帅潮实业有限公司","value":"3000.00"}, 22 {"name":"青岛市琴岛电器有限公司","value":"1200.00"}, 23 {"name":"青岛普天电器有限公司","value":"6000.00"}, 24 {"name":"青岛龙兴机械有限公司","value":"200.00"}, 25 {"name":"青岛理研电线电缆有限公司","value":"1000.00"}, 26 {"name":"青岛胶南瑞源纸业有限公司","value":"500.00"}, 27 {"name":"青岛胶南惠丰机械有限公司","value":"100.00"}, 28 {"name":"青岛佳春机械有限公司","value":"500.00"} 29 ]; 30 var geoCoordMap = { 31 \'青岛威达体育用品有限公司\':[120.442145,36.353304], 32 \'青岛万福食品有限公司\':[120.501856,36.862275], 33 \'青岛帅潮实业有限公司\':[120.402697,36.218331], 34 \'青岛市琴岛电器有限公司\':[120.500757,36.417052], 35 \'青岛普天电器有限公司\':[120.083109,36.295657], 36 \'青岛龙兴机械有限公司\':[119.778027,36.997143], 37 \'青岛理研电线电缆有限公司\':[120.510292,36.309673], 38 \'青岛胶南瑞源纸业有限公司\':[120.02328,35.890329], 39 \'青岛胶南惠丰机械有限公司\':[119.918591,35.918377], 40 \'青岛佳春机械有限公司\':[120.010518,36.063161] 41 } 42 43 //获取数据和坐标 44 var convertData= function (data) { 45 var res = []; 46 for (var i = 0; i < data.length; i++) { 47 48 var geoCoord = geoCoordMap[data[i].name]; 49 50 if (geoCoord) { 51 res.push({ 52 name: data[i].name, 53 value: geoCoord.concat(data[i].value) 54 }); 55 56 } 57 } 58 return res; 59 }; 60 61 var option = { 62 backgroundColor: \'#404a59\', 63 title: { 64 text: \'青岛市企业分布\', 65 left: \'center\', 66 textStyle: { 67 color: \'#fff\' 68 } 69 }, 70 //提示框 71 tooltip : { 72 trigger: \'item\', 73 formatter: function (params) { //添加数字,否则为坐标 74 //console.log(params.value) 75 return params.name+\'<br>\'+\'注册资本\'+\'\'+\':\'+\'\'+params.value[2]+\'\'+\'万元\' 76 77 }, 78 padding:[ 79 5, // 上 80 10, // 右 81 5, // 下 82 10, // 左 83 ], 84 textStyle:{ 85 color: \'#fff\', 86 fontSize:\'13\' 87 } 88 }, 89 //图例组件 90 legend: { 91 orient: \'horizontal\', 92 //相等于left 、top、bottom、right 93 y: \'bottom\', 94 x:\'right\', 95 //这里的数据名称要和series中的name名称一样,否则不显示 96 data:[\'规上企业\'], 97 textStyle: { 98 color: \'#fff\' 99 } 100 }, 101 102 //地图 103 geo: { 104 map: \'qingdao\', 105 label: { 106 emphasis: { 107 show: false 108 } 109 }, 110 roam: true, 111 itemStyle: { 112 //正常状态下 113 normal: { 114 areaColor: \'#323c48\', 115 borderColor: \'#111\' 116 }, 117 //选定某一区域下 相当于 hover 118 emphasis: { 119 areaColor: \'#2a333d\' 120 121 } 122 123 }, 124 z:1 125 }, 126 //这里数据中主要是冒泡图数据 127 series : [{ 128 name: \'规上企业\', 129 type: \'scatter\', 130 coordinateSystem: \'geo\', 131 //标点的大小 132 data: convertData(data), 133 symbolSize: function (val) { 134 return val[2] / 30000; //也可以根据这里的数值更改大小 val[2] / x x越小,标点越大 135 }, 136 label: { 137 normal: { 138 formatter: \'{b}\', 139 position: \'right\', 140 show: false //根据需求可以更改标点标签是否显示 141 }, 142 emphasis: { 143 show: true 144 } 145 }, 146 itemStyle: { 147 normal: { 148 color: \'#ddb926\' 149 } 150 } 151 }, 152 { 153 name:\'上规企业\', 154 type: \'effectScatter\', 155 coordinateSystem: \'geo\', 156 data: convertData(data.sort(function (a, b) { //这里是多个数据比较大小 157 return b.value - a.value; 158 }).slice(0,1000)), //slice里面的数可以是0 ,意思是全部显示 0,1000 意思是显示这组数据中最大前1000组 159 symbolSize: function (val) { 160 return val[2] / 30000; 161 }, 162 163 showEffectOn: \'render\', 164 rippleEffect: { 165 brushType: \'stroke\' 166 }, 167 hoverAnimation: true, 168 label: { 169 normal: { 170 formatter: \'{b}\', 171 position: \'right\', 172 show: false 173 }, 174 emphasis: { 175 show: true 176 } 177 }, 178 itemStyle: { 179 normal: { 180 color: \'#f4e925\', 181 shadowBlur: 10, 182 shadowColor: \'#333\' 183 } 184 } 185 186 } 187 188 ] 189 }; 190 191 chart.setOption(option); 192 </script> 193 </body> 194 </html>
效果图如下:
具体的echarts配置请参考echarts文档:http://echarts.baidu.com/option.html#title
另一种地图标点可以试着做一下哦!
二、折线图
折线图的准备工作只是下载echarts文件。
以下是代码:
1 option = { 2 //这里如果不想用echart自动配置的颜色,可以设定一下 3 color: [\'#2ec7c9\', \'#b7a3de\', \'#5ab1ef\', \'#febd87\'], 4 5 tooltip: { 6 //触发类型 7 trigger: \'axis\' 8 }, 9 legend: { 10 data:[\'交易额\',\'交易笔数\',\'卡均交易额\',\'卡均交易笔数\'], 11 top:"3%" 12 }, 13 grid: { 14 15 left: \'3%\', 16 right: \'4%\', 17 bottom: \'10%\', 18 containLabel: true 19 20 }, 21 toolbox: { 22 feature: { 23 dataView:{ 24 iconStyle:{ 25 normal:{ 26 borderColor:\'#d87f3f\' 27 } 28 } 29 }, 30 restore:{ 31 iconStyle:{ 32 normal:{ 33 borderColor:\'#2a95ff\' 34 } 35 } 36 }, 37 38 magicType: { 39 type: [\'line\', \'bar\'], 40 iconStyle:{ 41 normal:{ 42 borderColor:\'#54c954\' 43 } 44 } 45 }, 46 //保存图片 47 saveAsImage: { 48 iconStyle:{ 49 normal:{ 50 borderColor:\'#4b0082\' 51 } 52 } 53 } 54 }, 55 right:\'6%\', 56 top:\'3%\' 57 }, 58 xAxis: { 59 type: \'category\', 60 boundaryGap: false, 61 axisLine:{ 62 show:true, 63 //可以给坐标轴设定颜色 64 lineStyle:{ 65 color:"#008acd", 66 width:2, 67 type:\'solid\' 68 } 69 }, 70 71 data: [\'周一\',\'周二\',\'周三\',\'周四\',\'周五\',\'周六\',\'周日\'] 72 }, 73 yAxis: { 74 type: \'value\', 75 axisLine:{ 76 show:true, 77 lineStyle:{ 78 color:"#008acd", 79 width:2, 80 type:\'solid\' 81 } 82 }, 83 }, 84 series: [ 85 { 86 name:\'交易额\', 87 type:\'line\', 88 stack: \'总量\', 89 data:[120, 132, 101, 134, 90, 230, 210] 90 }, 91 { 92 name:\'交易笔数\', 93 type:\'line\', 94 stack: \'总量\', 95 data:[220, 182, 191, 234, 290, 330, 310] 96 }, 97 { 98 name:\'卡均交易额\', 99 type:\'line\', 100 stack: \'总量\', 101 data:[150, 232, 201, 154, 190, 330, 410] 102 }, 103 { 104 name:\'卡均交易笔数\', 105 type:\'line\', 106 stack: \'总量\', 107 data:[320, 332, 301, 334, 390, 330, 320] 108 } 109 ] 110 };
值得注意以下:如果想要图表自适应,跟bootstrap连用,千万别忘了这句话:
window.onresize = function(){
myChart.resize();
}
三、饼图
给出这张设计图,难点应该是外面的圈了吧!
这里问了echarts是群里的大神,然后看了配置文档,做了出来,(思想是做了两个饼图,大的是饼图中的圆形图)贴出代码:
1 option = { 2 color :[\'#2ec7c9\',\'#b6a2de\',\'#5ab1ef\',\'#ffb980\',\'#d87a80\',\'#8d98b3\',\'#e5cf0d\',\'#97b552\',\'#95706d\',\'#dc69aa\',\'#07a2a4\'], 3 title : { 4 text: \'交易额前10位卡产品\', 5 subtext: \'单位:万\', 6 x:\'center\' 7 }, 8 tooltip : { 9 trigger: \'item\', 10 formatter: "{a} <br/>{b} : {c} ({d}%)" 11 }, 12 13 series : [ 14 { 15 name: \'\', 16 type: \'pie\', 17 radius : \'60%\', 18 center: [\'50%\', \'50%\'], 19 data:[ 20 {value:335, name:\'卡1\'}, 21 {value:310, name:\'卡2\'}, 22 {value:234, name:\'卡3\'}, 23 {value:135, name:\'卡4\'}, 24 {value:1548, name:\'卡5\'}, 25 {value:335, name:\'卡6\'}, 26 {value:111, name:\'卡7\'}, 27 {value:222, name:\'卡8\'}, 28 {value:135, name:\'卡9\'}, 29 {value:321, name:\'卡10\'}, 30 {value:135, name:\'其他\'}, 31 ], 32 itemStyle: { 33 emphasis: { 34 shadowBlur: 10, 35 shadowOffsetX: 0, 36 shadowColor: \'rgba(0, 0, 0, 0.5)\' 37 } 38 }, 39 markArea:{ 40 itemStyle:{ 41 normal:{ 42 43 borderColor:\'#000\', 44 borderType:\'solid\' 45 } 46 } 47 } 48 }, 49 { 50 51 type: \'pie\', 52 //因为是需要圆形,所以提示框之类的都不显示 53 tooltip: { 54 show: false 55 }, 56 hoverAnimation: false, //鼠标移入变大 57 radius: [\'65%\', \'65.5%\'], //圆心空出的大小 58 itemStyle: { 59 normal: { 60 label: { 61 show: false, 62 position: \'outside\' 63 }, 64 labelLine: { 65 show: false, 66 length: 100, 67 smooth: 0.5 68 }, 69 borderWidth: 5, 70 shadowBlur: 40 71 72 73 } 74 }, 75 data: [{ 76 value: 0 77 78 }] 79 } 80 ] 81 };
echarts图表很有趣,对数据可视化感兴趣的可以体验体验,看着一些大神做出来的图表,佩服的五体投地。贴张图分享下~
网址:http://gallery.echartsjs.com/explore.html#sort=rank~timeframe=all~author=all
5.5 星期五 【完】