| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="../common/echarts.min.js"></script> |
| <script src="../data/life-timeline.js"></script> |
| <link rel="stylesheet" href="../common/reset.css"> |
| </head> |
| <body> |
| <div id="main"></div> |
| |
| |
| |
| <script> |
| |
| var animation = location.href.split('?'); |
| if (animation[1]) { |
| var match = animation[1].match(/animation=([a-zA-Z0-9_]+)/); |
| animation = match[1] !== 'false' && match[1] !== '0' && !!match[1]; |
| } |
| else { |
| animation = true; |
| } |
| |
| |
| |
| var rawData = window.rawData; |
| |
| var itemStyle = { |
| normal: { |
| opacity: 0.8, |
| shadowBlur: 10, |
| shadowOffsetX: 0, |
| shadowOffsetY: 0, |
| shadowColor: 'rgba(0, 0, 0, 0.5)' |
| } |
| }; |
| |
| var sizeFunction = function (x) { |
| var y = Math.sqrt(x / 5e8) + 0.1; |
| return y * 40; |
| }; |
| // Schema: |
| var schema = [ |
| {name: 'Income', index: 0, text: '人均收入', unit: '美元'}, |
| {name: 'LifeExpectancy', index: 1, text: '人均寿命', unit: '岁'}, |
| {name: 'Population', index: 2, text: '总人口', unit: ''}, |
| {name: 'Country', index: 3, text: '国家', unit: ''} |
| ]; |
| |
| option = { |
| baseOption: { |
| animation: animation, |
| timeline: { |
| axisType: 'category', |
| orient: 'vertical', |
| autoPlay: true, |
| inverse: true, |
| playInterval: 1000, |
| left: null, |
| right: 10, |
| top: 30, |
| bottom: 20, |
| width: 55, |
| height: null, |
| label: { |
| normal: { |
| textStyle: { |
| color: '#ddd' |
| } |
| }, |
| emphasis: { |
| textStyle: { |
| color: '#fff' |
| } |
| } |
| }, |
| symbol: 'none', |
| lineStyle: { |
| color: '#555' |
| }, |
| checkpointStyle: { |
| color: '#bbb', |
| borderColor: '#777', |
| borderWidth: 2 |
| }, |
| controlStyle: { |
| showNextBtn: false, |
| showPrevBtn: false, |
| normal: { |
| color: '#666', |
| borderColor: '#666' |
| }, |
| emphasis: { |
| color: '#aaa', |
| borderColor: '#aaa' |
| } |
| }, |
| data: [] |
| }, |
| backgroundColor: '#333', |
| title: { |
| 'text': rawData.timeline[0], |
| textAlign: 'center', |
| right: 50, |
| bottom: 60, |
| textStyle: { |
| fontSize: 60, |
| color: 'rgba(255, 255, 255, 0.9)' |
| } |
| }, |
| tooltip: { |
| padding: 5, |
| backgroundColor: '#222', |
| borderColor: '#777', |
| borderWidth: 1 |
| }, |
| xAxis: { |
| type: 'log', |
| name: '人均收入', |
| max: 100000, |
| min: 300, |
| nameGap: 25, |
| nameLocation: 'middle', |
| nameTextStyle: { |
| fontSize: 16 |
| }, |
| splitLine: { |
| show: false |
| }, |
| axisTick: { |
| lineStyle: { |
| color: '#ddd' |
| } |
| }, |
| axisLine: { |
| lineStyle: { |
| color: '#ddd' |
| } |
| }, |
| axisLabel: { |
| formatter: '{value} $', |
| textStyle: { |
| color: '#ddd' |
| } |
| } |
| }, |
| yAxis: { |
| type: 'value', |
| name: '平均寿命', |
| nameGap: 25, |
| nameLocation: 'start', |
| max: 100, |
| nameTextStyle: { |
| color: '#ccc', |
| fontSize: 16 |
| }, |
| axisLine: { |
| lineStyle: { |
| color: '#ddd' |
| } |
| }, |
| axisTick: { |
| lineStyle: { |
| color: '#ddd' |
| } |
| }, |
| splitLine: { |
| show: false |
| }, |
| axisLabel: { |
| formatter: '{value} 岁', |
| textStyle: { |
| color: '#ddd' |
| } |
| } |
| }, |
| grid: { |
| top: 30, |
| left: 60, |
| right: 110 |
| }, |
| visualMap: [ |
| { |
| show: false, |
| type: 'piecewise', |
| dimension: 3, |
| categories: rawData.countries.map(function (item) { |
| return item[2]; |
| }), |
| left: 10, |
| bottom: 35, |
| calculable: true, |
| precision: 0.1, |
| textGap: 10, |
| itemGap: 12, |
| textStyle: { |
| color: '#ccc' |
| }, |
| inRange: { |
| color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a', '#376956', '#c3bed4', '#495a80', '#9966cc', '#bdb76a', '#eee8ab', '#a35015', '#04dd98', '#d9b3e6'] |
| }, |
| outOfRange: { |
| color: '#555' |
| } |
| } |
| ], |
| series: [ |
| { |
| type: 'scatter', |
| id: 'gridScatter', |
| itemStyle: itemStyle, |
| data: rawData.series[0], |
| symbolSize: function(val) { |
| return sizeFunction(val[2]); |
| }, |
| tooltip: { |
| formatter: function (obj) { |
| var value = obj.value; |
| return schema[3].text + ':' + value[3] + '<br>' |
| + schema[1].text + ':' + value[1] + schema[1].unit + '<br>' |
| + schema[0].text + ':' + value[0] + schema[0].unit + '<br>' |
| + schema[2].text + ':' + value[2] + '<br>'; |
| } |
| } |
| }, |
| { |
| type: 'scatter', |
| id: 'geoScatter', |
| coordinateSystem: 'geo', |
| itemStyle: { |
| normal: { |
| opacity: 1, |
| shadowBlur: 5, |
| shadowColor: 'rgba(0, 0, 0, 0.5)' |
| }, |
| }, |
| data: rawData.countries.map(function (item) { |
| return [item[0], item[1], 0, item[2]]; |
| }), |
| symbolSize: 15, |
| tooltip: { |
| formatter: function (obj) { |
| var value = obj.value; |
| return schema[3].text + ':' + value[3]; |
| } |
| } |
| } |
| ], |
| animationDurationUpdate: 1000, |
| animationEasingUpdate: 'quinticInOut' |
| }, |
| options: [] |
| }; |
| |
| for (var n = 0; n < rawData.timeline.length; n++) { |
| option.baseOption.timeline.data.push(rawData.timeline[n]); |
| option.options.push({ |
| title: { |
| show: true, |
| 'text': rawData.timeline[n] + '' |
| }, |
| series: { |
| id: 'gridScatter', |
| name: rawData.timeline[n], |
| type: 'scatter', |
| itemStyle: itemStyle, |
| data: rawData.series[n], |
| symbolSize: function(val) { |
| return sizeFunction(val[2]); |
| } |
| } |
| }); |
| } |
| |
| var myChart = echarts.init(document.getElementById('main')); |
| myChart.setOption(option); |
| |
| </script> |
| </body> |
| </html> |