|  | <!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> |