| <!DOCTYPE html> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you under the Apache License, Version 2.0 (the | |
| "License"); you may not use this file except in compliance | |
| with the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an | |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations | |
| under the License. | |
| --> | |
| <!-- | |
| This data and the design of this chart is copied from: | |
| http://bl.ocks.org/syntagmatic/3150059 | |
| --> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <script src="lib/simpleRequire.js"></script> | |
| <script src="lib/config.js"></script> | |
| <script src="lib/jquery.min.js"></script> | |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | |
| <link rel="stylesheet" href="lib/reset.css"> | |
| </head> | |
| <body> | |
| <style> | |
| body { | |
| background: #333; | |
| } | |
| #main { | |
| height: 1000px; | |
| } | |
| </style> | |
| <div id="main"></div> | |
| <script> | |
| var echarts; | |
| var colorTool; | |
| var chart; | |
| var myChart; | |
| var groupCategories = []; | |
| var groupColors = []; | |
| require([ | |
| 'echarts', | |
| './data/nutrients.json' | |
| ], function (ec, data) { | |
| echarts = ec; | |
| colorTool = echarts.color; | |
| var indices = { | |
| name: 0, | |
| group: 1, | |
| id: 16 | |
| }; | |
| normalizeData(data); | |
| chart = myChart = echarts.init(document.getElementById('main')); | |
| var schema = [ | |
| {name: 'name', index: 0}, | |
| {name: 'group', index: 1}, | |
| {name: 'protein', index: 2}, | |
| {name: 'calcium', index: 3}, | |
| {name: 'sodium', index: 4}, | |
| {name: 'fiber', index: 5}, | |
| {name: 'vitaminc', index: 6}, | |
| {name: 'potassium', index: 7}, | |
| {name: 'carbohydrate', index: 8}, | |
| {name: 'sugars', index: 9}, | |
| {name: 'fat', index: 10}, | |
| {name: 'water', index: 11}, | |
| {name: 'calories', index: 12}, | |
| {name: 'saturated', index: 13}, | |
| {name: 'monounsat', index: 14}, | |
| {name: 'polyunsat', index: 15}, | |
| {name: 'id', index: 16} | |
| ]; | |
| function normalizeData(originData) { | |
| var groupMap = {}; | |
| originData.forEach(row => { | |
| var groupName = row[indices.group]; | |
| if (!groupMap.hasOwnProperty(groupName)) { | |
| groupMap[groupName] = 1; | |
| } | |
| }); | |
| originData.forEach(row => { | |
| row.forEach((item, index) => { | |
| if (index !== indices.name | |
| && index !== indices.group | |
| && index !== indices.id | |
| ) { | |
| // Convert null to zero, as all of them under unit "g". | |
| row[index] = parseFloat(item) || 0; | |
| } | |
| }); | |
| }); | |
| for (var groupName in groupMap) { | |
| if (groupMap.hasOwnProperty(groupName)) { | |
| groupCategories.push(groupName); | |
| } | |
| } | |
| var hStep = Math.round(300 / (groupCategories.length - 1)); | |
| for (var i = 0; i < groupCategories.length; i++) { | |
| groupColors.push(colorTool.modifyHSL('#5A94DF', hStep * i)); | |
| } | |
| } | |
| function getOption(data) { | |
| var lineStyle = { | |
| normal: { | |
| width: 0.5, | |
| opacity: 0.05 | |
| // shadowBlur: 10, | |
| // shadowOffsetX: 0, | |
| // shadowOffsetY: 0, | |
| // shadowColor: 'rgba(0, 0, 0, 0.5)' | |
| } | |
| }; | |
| return { | |
| backgroundColor: '#333', | |
| tooltip: { | |
| padding: 10, | |
| backgroundColor: '#222', | |
| borderColor: '#777', | |
| borderWidth: 1 | |
| }, | |
| title: [ | |
| { | |
| text: 'Groups', | |
| top: 0, | |
| left: 0, | |
| textStyle: { | |
| color: '#fff' | |
| } | |
| } | |
| ], | |
| visualMap: { | |
| show: true, | |
| type: 'piecewise', | |
| categories: groupCategories, | |
| dimension: indices.group, | |
| inRange: { | |
| color: groupColors //['#d94e5d','#eac736','#50a3ba'] | |
| }, | |
| outOfRange: { | |
| color: ['#ccc'] //['#d94e5d','#eac736','#50a3ba'] | |
| }, | |
| top: 20, | |
| textStyle: { | |
| color: '#fff' | |
| }, | |
| realtime: false | |
| }, | |
| parallelAxis: [ | |
| {dim: 16, name: schema[16].name, scale: true, nameLocation: 'end'}, | |
| {dim: 2, name: schema[2].name, nameLocation: 'end'}, | |
| {dim: 4, name: schema[4].name, nameLocation: 'end'}, | |
| {dim: 3, name: schema[3].name, nameLocation: 'end'}, | |
| {dim: 5, name: schema[5].name, nameLocation: 'end'}, | |
| {dim: 6, name: schema[6].name, nameLocation: 'end'}, | |
| {dim: 7, name: schema[7].name, nameLocation: 'end'}, | |
| {dim: 8, name: schema[8].name, nameLocation: 'end'}, | |
| {dim: 9, name: schema[9].name, nameLocation: 'end'}, | |
| {dim: 10, name: schema[10].name, nameLocation: 'end'}, | |
| {dim: 11, name: schema[11].name, nameLocation: 'end'}, | |
| {dim: 12, name: schema[12].name, nameLocation: 'end'}, | |
| {dim: 13, name: schema[13].name, nameLocation: 'end'}, | |
| {dim: 14, name: schema[14].name, nameLocation: 'end'}, | |
| {dim: 15, name: schema[15].name, nameLocation: 'end'} | |
| ], | |
| parallel: { | |
| left: 280, | |
| top: 20, | |
| // top: 150, | |
| // height: 300, | |
| width: 400, | |
| layout: 'vertical', | |
| parallelAxisDefault: { | |
| type: 'value', | |
| name: 'nutrients', | |
| nameLocation: 'end', | |
| nameGap: 20, | |
| nameTextStyle: { | |
| color: '#fff', | |
| fontSize: 14 | |
| }, | |
| axisLine: { | |
| lineStyle: { | |
| color: '#aaa' | |
| } | |
| }, | |
| axisTick: { | |
| lineStyle: { | |
| color: '#777' | |
| } | |
| }, | |
| splitLine: { | |
| show: false | |
| }, | |
| axisLabel: { | |
| textStyle: { | |
| color: '#fff' | |
| } | |
| }, | |
| realtime: false | |
| } | |
| }, | |
| animation: false, | |
| series: [ | |
| { | |
| name: 'nutrients', | |
| type: 'parallel', | |
| lineStyle: lineStyle, | |
| inactiveOpacity: 0, | |
| activeOpacity: 0.01, | |
| progressive: 500, | |
| smooth: true, | |
| data: data | |
| } | |
| ] | |
| }; | |
| } | |
| console.time('render'); | |
| chart.setOption(getOption(data)); | |
| console.timeEnd('render'); | |
| chart.on('axisAreaSelected', function (event) { | |
| // var indices = chart.getModel().getSeries()[0].getRawIndicesByActiveState('active'); | |
| // console.log('北京: ', indices); | |
| }); | |
| }); | |
| </script> | |
| </body> | |
| </html> |