echarts示例_借官方示例学习一下 series「i」-lines 用法

e6bcbf168e9370996b7fb3412033b83c.png

series[i]-lines 主要用于迁徙图,实现航线、路线的可视化,在这借 ECharts 官方迁徙示例学习一下其使用

原始数据

var geoCoordMap = { '上海': [121.4648,31.2891], '东莞': [113.8953,22.901], '东营': [118.7073,37.5513] ...};var BJData = [ [{name:'北京'}, {name:'上海',value:95}], [{name:'北京'}, {name:'广州',value:90}] ...];var SHData = [ [{name:'上海'},{name:'包头',value:95}], [{name:'上海'},{name:'昆明',value:90}] ...];var GZData = [ [{name:'广州'},{name:'福州',value:95}], [{name:'广州'},{name:'太原',value:90}] ...];

这一段代码定义了迁徙图要使用的原始数据(...表省略,要不太长了):

  • geoCoorMap 提供各城市经纬度坐标,地图上标点、标线都需要通过坐标进行。
  • BJData、SHData、GZData 是城市间连线的原始数据。

数据转换

var convertData = function (data) { var res = []; for (var i = 0; i < data.length; i++) { var dataItem = data[i];  //通过地区名获取起点坐标 var fromCoord = geoCoordMap[dataItem[0].name];  //通过地区名获取终点坐标  var toCoord = geoCoordMap[dataItem[1].name];  if (fromCoord && toCoord) { res.push({ fromName: dataItem[0].name, toName: dataItem[1].name, coords: [fromCoord, toCoord] }); } } return res;};

这一段定义了数据格式转换的函数,可以把原始数据转换为 series[i]-lines 适用的数据格式:

 [[{name:'北京'}, {name:'上海',value:95}], [{name:'北京'}, {name:'广州',value:90}] ... ]
  • 结合
['上海': [121.4648, 31.2891], '东莞': [113.8953, 22.901], '东营': [118.7073, 37.5513], '中山': [113.4229, 22.478] ...]
  • 转换为
[{ 'fromName': '北京', 'toName': '拉萨', 'coords': [ [116.4551, 40.2539], [91.1865, 30.1465] ] }, { 'fromName': '北京', 'toName': '南宁', 'coords': [ [116.4551, 40.2539], [108.479, 23.1152] ] } ...]

生成 series 配置

var color = ['#a6c84c', '#ffa022', '#46bee9'];

准备一个配色的列表,在后面生成 series 时用于图形颜色的自定义

var series = [];

准备一个空列表,用于存放后续生成的 series 配置

[['北京', BJData],['上海', SHData],['广州', GZData]].forEach(function (item, i) { series.push({ name: item[0] + ' Top10', type: 'lines',  //zlevel 大的 Canvas 会放在 zlevel 小的 Canvas 的上面。 zlevel: 1, effect: { show: true,  //特效动画的时间(飞机从起点到终点需要多少秒) //constantSpeed不为 0 时,period 会被忽略 period: 6,   //特效尾迹的长度。取从 0 到 1 的值,数值越大尾迹越长。 trailLength: 0.7,  //特效标记的颜色 color: '#fff',  //symbol 缺省值 'circle' 圆形  //特效标记的大小 symbolSize: 3 }, lineStyle: { normal: { color: color[i], width: 0, curveness: 0.2 } }, //使用定义好的数据格式转换函数生成lines的数据 data: convertData(item[1]) }, { name: item[0] + ' Top10', type: 'lines', zlevel: 2, symbol: ['none', 'arrow'], symbolSize: 10, effect: { show: true, period: 6, trailLength: 0, symbol: planePath, symbolSize: 15 }, lineStyle: { normal: { color: color[i], width: 1, opacity: 0.6, curveness: 0.2 } }, data: convertData(item[1]) }, { name: item[0] + ' Top10', type: 'effectScatter', coordinateSystem: 'geo', zlevel: 2, rippleEffect: { brushType: 'stroke' }, label: { normal: { show: true, position: 'right', formatter: '{b}' } }, symbolSize: function (val) { return val[2] / 8; }, itemStyle: { normal: { color: color[i] } }, //生成散点图数据 data: item[1].map(function (dataItem) { return { name: dataItem[1].name, value: geoCoordMap[dataItem[1].name].concat([dataItem[1].value]) }; }) });});

针对 BJData、SHData、GZData 每一个数据,各生成3个 series:

  1. 【series[i]-lines】通过设置较大的 effect.trailLength(特效尾迹),实现飞机飞过的尾迹;
  2. 【series[i]-lines】通过自定义 effect.symbol(特效图形的标记/形状),实现飞机的形状;
  3. 【series[i]-effectScatter】通过带涟漪特效动画的散点图,标出lines终点

定义配置项 option

option = { backgroundColor: '#404a59', title : { text: '借官方示例学习一下series[i]-lines用法', subtext: '数据纯属虚构', left: 'center', textStyle : { color: '#fff' } }, tooltip : { //提示框由数据图形触发 trigger: 'item' }, legend: { orient: 'vertical', top: 'bottom', left: 'right', data:['北京 Top10', '上海 Top10', '广州 Top10'], textStyle: { color: '#fff' }, selectedMode: 'single' }, geo: { map: 'china', label: { emphasis: { show: false } },  //开启鼠标控制的缩放和平移 roam: true,  itemStyle: { normal: { areaColor: '#323c48', borderColor: '#404a59' }, emphasis: { areaColor: '#2a333d' } } }, //将之前生成好的series配置项引入 series: series};
  • geo 引入地理坐标系组件,需要引入 geoJSON 地图(备注)
  • series 通过 series 变量引入此前生成好的 series 配置

因为是在 echarts 的 gallery 里练习的,只需要定义好 option 变量就能出图,如果是在自己的网页里,别忘了这两个步骤(myChart 这个变量名可根据自己需要命名,option 也是 ):

  • echarts实例初始化
var myChart = echarts.init(document.getElementById('main'));
  • 显示图表
myChart.setOption(option);

【备注】如何引入 geoJSON 地图?

  • JavaScript 引入示例(摘自ECharts配置项手册)
  • JSON 引入示例(摘自ECharts配置项手册)
$.get('map/json/china.json', function (chinaJson) { echarts.registerMap('china', chinaJson); var chart = echarts.init(document.getElementById('main')); chart.setOption({ series: [{ type: 'map', map: 'china' }] });});

备注:此文首发于自己的公众号「ECharts学习」

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值