前记:离上一篇博客的发布已经过去两个月了,这期间总想写点什么,却怎么都写不出来,一直拖到了现在。现在的感觉,不是像这期间一样,想好好整理一番,写一篇好博客,却写不出来。事实发现,随心就好,较好的博客,需要深入的技术,现在能力还不够,只能把所遇到的问题写出来,整理一下就好。周五了,一天过去了一半,利用闲下来的时间,把这些天遇到的问题整理一下吧。
一、地图标点(以青岛地图为例)
地图标点有两种方法(两种地图的展现方式)
准备工作:
下载echarts文件。(下载地址:/download.html)
注意:建议下载完整包,不要自己构建。因为地图要跟冒泡图结合,有些需要东西,自己也不清楚,下个完整包就可以了。
青岛地图下载(下载地址:http://ecomfe.github.io/echarts-map-tool/ 可以自己构建全国各省市地图)
上图给出两种构建地图的方法,特别注意的是引入json数据的时候,使用chrome打开的时候需要搭配跨域环境,请参考以前写的文章/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
2
3
4
5
6
7
8
9
10
11
12
13
14
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+'
'+'注册资本'+''+':'+''+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
193
194
效果图如下:
具体的echarts配置请参考echarts文档:/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}
{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图表很有趣,对数据可视化感兴趣的可以体验体验,看着一些大神做出来的图表,佩服的五体投地。贴张图分享下~
网址:/explore.html#sort=rank~timeframe=all~author=all
如果觉得《echarts 世界地图标点_关于echarts的那些事(地图标点 折线图 饼图)》对你有帮助,请点赞、收藏,并留下你的观点哦!