|  | <!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. | 
|  | --> | 
|  |  | 
|  |  | 
|  | <html> | 
|  | <head> | 
|  | <meta charset="utf-8"> | 
|  | <script src="lib/simpleRequire.js"></script> | 
|  | <script src="lib/config.js"></script> | 
|  | <meta name="viewport" content="width=device-width, initial-scale=1" /> | 
|  | <link rel="stylesheet" href="lib/reset.css"> | 
|  | </head> | 
|  | <body> | 
|  | <style> | 
|  | </style> | 
|  | <div id="main"></div> | 
|  | <script> | 
|  |  | 
|  | var echarts; | 
|  | var chart; | 
|  | var myChart; | 
|  |  | 
|  | require([ | 
|  | 'echarts' | 
|  | ], function (ec) { | 
|  |  | 
|  | echarts = ec; | 
|  |  | 
|  | var rawData = [ | 
|  | [5.1, 3.5, 1.4, 0.2, "setosa"], | 
|  | [4.9, 3.0, 1.4, 0.2, "setosa"], | 
|  | [4.7, 3.2, 1.3, 0.2, "setosa"], | 
|  | [4.6, 3.1, 1.5, 0.2, "setosa"], | 
|  | [5.0, 3.6, 1.4, 0.2, "setosa"], | 
|  | [5.4, 3.9, 1.7, 0.4, "setosa"], | 
|  | [4.6, 3.4, 1.4, 0.3, "setosa"], | 
|  | [5.0, 3.4, 1.5, 0.2, "setosa"], | 
|  | [4.4, 2.9, 1.4, 0.2, "setosa"], | 
|  | [4.9, 3.1, 1.5, 0.1, "setosa"], | 
|  | [5.4, 3.7, 1.5, 0.2, "setosa"], | 
|  | [4.8, 3.4, 1.6, 0.2, "setosa"], | 
|  | [4.8, 3.0, 1.4, 0.1, "setosa"], | 
|  | [4.3, 3.0, 1.1, 0.1, "setosa"], | 
|  | [5.8, 4.0, 1.2, 0.2, "setosa"], | 
|  | [5.7, 4.4, 1.5, 0.4, "setosa"], | 
|  | [5.4, 3.9, 1.3, 0.4, "setosa"], | 
|  | [5.1, 3.5, 1.4, 0.3, "setosa"], | 
|  | [5.7, 3.8, 1.7, 0.3, "setosa"], | 
|  | [5.1, 3.8, 1.5, 0.3, "setosa"], | 
|  | [5.4, 3.4, 1.7, 0.2, "setosa"], | 
|  | [5.1, 3.7, 1.5, 0.4, "setosa"], | 
|  | [4.6, 3.6, 1.0, 0.2, "setosa"], | 
|  | [5.1, 3.3, 1.7, 0.5, "setosa"], | 
|  | [4.8, 3.4, 1.9, 0.2, "setosa"], | 
|  | [5.0, 3.0, 1.6, 0.2, "setosa"], | 
|  | [5.0, 3.4, 1.6, 0.4, "setosa"], | 
|  | [5.2, 3.5, 1.5, 0.2, "setosa"], | 
|  | [5.2, 3.4, 1.4, 0.2, "setosa"], | 
|  | [4.7, 3.2, 1.6, 0.2, "setosa"], | 
|  | [4.8, 3.1, 1.6, 0.2, "setosa"], | 
|  | [5.4, 3.4, 1.5, 0.4, "setosa"], | 
|  | [5.2, 4.1, 1.5, 0.1, "setosa"], | 
|  | [5.5, 4.2, 1.4, 0.2, "setosa"], | 
|  | [4.9, 3.1, 1.5, 0.2, "setosa"], | 
|  | [5.0, 3.2, 1.2, 0.2, "setosa"], | 
|  | [5.5, 3.5, 1.3, 0.2, "setosa"], | 
|  | [4.9, 3.6, 1.4, 0.1, "setosa"], | 
|  | [4.4, 3.0, 1.3, 0.2, "setosa"], | 
|  | [5.1, 3.4, 1.5, 0.2, "setosa"], | 
|  | [5.0, 3.5, 1.3, 0.3, "setosa"], | 
|  | [4.5, 2.3, 1.3, 0.3, "setosa"], | 
|  | [4.4, 3.2, 1.3, 0.2, "setosa"], | 
|  | [5.0, 3.5, 1.6, 0.6, "setosa"], | 
|  | [5.1, 3.8, 1.9, 0.4, "setosa"], | 
|  | [4.8, 3.0, 1.4, 0.3, "setosa"], | 
|  | [5.1, 3.8, 1.6, 0.2, "setosa"], | 
|  | [4.6, 3.2, 1.4, 0.2, "setosa"], | 
|  | [5.3, 3.7, 1.5, 0.2, "setosa"], | 
|  | [5.0, 3.3, 1.4, 0.2, "setosa"], | 
|  | [7.0, 3.2, 4.7, 1.4, "versicolor"], | 
|  | [6.4, 3.2, 4.5, 1.5, "versicolor"], | 
|  | [6.9, 3.1, 4.9, 1.5, "versicolor"], | 
|  | [5.5, 2.3, 4.0, 1.3, "versicolor"], | 
|  | [6.5, 2.8, 4.6, 1.5, "versicolor"], | 
|  | [5.7, 2.8, 4.5, 1.3, "versicolor"], | 
|  | [6.3, 3.3, 4.7, 1.6, "versicolor"], | 
|  | [4.9, 2.4, 3.3, 1.0, "versicolor"], | 
|  | [6.6, 2.9, 4.6, 1.3, "versicolor"], | 
|  | [5.2, 2.7, 3.9, 1.4, "versicolor"], | 
|  | [5.0, 2.0, 3.5, 1.0, "versicolor"], | 
|  | [5.9, 3.0, 4.2, 1.5, "versicolor"], | 
|  | [6.0, 2.2, 4.0, 1.0, "versicolor"], | 
|  | [6.1, 2.9, 4.7, 1.4, "versicolor"], | 
|  | [5.6, 2.9, 3.6, 1.3, "versicolor"], | 
|  | [6.7, 3.1, 4.4, 1.4, "versicolor"], | 
|  | [5.6, 3.0, 4.5, 1.5, "versicolor"], | 
|  | [5.8, 2.7, 4.1, 1.0, "versicolor"], | 
|  | [6.2, 2.2, 4.5, 1.5, "versicolor"], | 
|  | [5.6, 2.5, 3.9, 1.1, "versicolor"], | 
|  | [5.9, 3.2, 4.8, 1.8, "versicolor"], | 
|  | [6.1, 2.8, 4.0, 1.3, "versicolor"], | 
|  | [6.3, 2.5, 4.9, 1.5, "versicolor"], | 
|  | [6.1, 2.8, 4.7, 1.2, "versicolor"], | 
|  | [6.4, 2.9, 4.3, 1.3, "versicolor"], | 
|  | [6.6, 3.0, 4.4, 1.4, "versicolor"], | 
|  | [6.8, 2.8, 4.8, 1.4, "versicolor"], | 
|  | [6.7, 3.0, 5.0, 1.7, "versicolor"], | 
|  | [6.0, 2.9, 4.5, 1.5, "versicolor"], | 
|  | [5.7, 2.6, 3.5, 1.0, "versicolor"], | 
|  | [5.5, 2.4, 3.8, 1.1, "versicolor"], | 
|  | [5.5, 2.4, 3.7, 1.0, "versicolor"], | 
|  | [5.8, 2.7, 3.9, 1.2, "versicolor"], | 
|  | [6.0, 2.7, 5.1, 1.6, "versicolor"], | 
|  | [5.4, 3.0, 4.5, 1.5, "versicolor"], | 
|  | [6.0, 3.4, 4.5, 1.6, "versicolor"], | 
|  | [6.7, 3.1, 4.7, 1.5, "versicolor"], | 
|  | [6.3, 2.3, 4.4, 1.3, "versicolor"], | 
|  | [5.6, 3.0, 4.1, 1.3, "versicolor"], | 
|  | [5.5, 2.5, 4.0, 1.3, "versicolor"], | 
|  | [5.5, 2.6, 4.4, 1.2, "versicolor"], | 
|  | [6.1, 3.0, 4.6, 1.4, "versicolor"], | 
|  | [5.8, 2.6, 4.0, 1.2, "versicolor"], | 
|  | [5.0, 2.3, 3.3, 1.0, "versicolor"], | 
|  | [5.6, 2.7, 4.2, 1.3, "versicolor"], | 
|  | [5.7, 3.0, 4.2, 1.2, "versicolor"], | 
|  | [5.7, 2.9, 4.2, 1.3, "versicolor"], | 
|  | [6.2, 2.9, 4.3, 1.3, "versicolor"], | 
|  | [5.1, 2.5, 3.0, 1.1, "versicolor"], | 
|  | [5.7, 2.8, 4.1, 1.3, "versicolor"], | 
|  | [6.3, 3.3, 6.0, 2.5, "virginica"], | 
|  | [5.8, 2.7, 5.1, 1.9, "virginica"], | 
|  | [7.1, 3.0, 5.9, 2.1, "virginica"], | 
|  | [6.3, 2.9, 5.6, 1.8, "virginica"], | 
|  | [6.5, 3.0, 5.8, 2.2, "virginica"], | 
|  | [7.6, 3.0, 6.6, 2.1, "virginica"], | 
|  | [4.9, 2.5, 4.5, 1.7, "virginica"], | 
|  | [7.3, 2.9, 6.3, 1.8, "virginica"], | 
|  | [6.7, 2.5, 5.8, 1.8, "virginica"], | 
|  | [7.2, 3.6, 6.1, 2.5, "virginica"], | 
|  | [6.5, 3.2, 5.1, 2.0, "virginica"], | 
|  | [6.4, 2.7, 5.3, 1.9, "virginica"], | 
|  | [6.8, 3.0, 5.5, 2.1, "virginica"], | 
|  | [5.7, 2.5, 5.0, 2.0, "virginica"], | 
|  | [5.8, 2.8, 5.1, 2.4, "virginica"], | 
|  | [6.4, 3.2, 5.3, 2.3, "virginica"], | 
|  | [6.5, 3.0, 5.5, 1.8, "virginica"], | 
|  | [7.7, 3.8, 6.7, 2.2, "virginica"], | 
|  | [7.7, 2.6, 6.9, 2.3, "virginica"], | 
|  | [6.0, 2.2, 5.0, 1.5, "virginica"], | 
|  | [6.9, 3.2, 5.7, 2.3, "virginica"], | 
|  | [5.6, 2.8, 4.9, 2.0, "virginica"], | 
|  | [7.7, 2.8, 6.7, 2.0, "virginica"], | 
|  | [6.3, 2.7, 4.9, 1.8, "virginica"], | 
|  | [6.7, 3.3, 5.7, 2.1, "virginica"], | 
|  | [7.2, 3.2, 6.0, 1.8, "virginica"], | 
|  | [6.2, 2.8, 4.8, 1.8, "virginica"], | 
|  | [6.1, 3.0, 4.9, 1.8, "virginica"], | 
|  | [6.4, 2.8, 5.6, 2.1, "virginica"], | 
|  | [7.2, 3.0, 5.8, 1.6, "virginica"], | 
|  | [7.4, 2.8, 6.1, 1.9, "virginica"], | 
|  | [7.9, 3.8, 6.4, 2.0, "virginica"], | 
|  | [6.4, 2.8, 5.6, 2.2, "virginica"], | 
|  | [6.3, 2.8, 5.1, 1.5, "virginica"], | 
|  | [6.1, 2.6, 5.6, 1.4, "virginica"], | 
|  | [7.7, 3.0, 6.1, 2.3, "virginica"], | 
|  | [6.3, 3.4, 5.6, 2.4, "virginica"], | 
|  | [6.4, 3.1, 5.5, 1.8, "virginica"], | 
|  | [6.0, 3.0, 4.8, 1.8, "virginica"], | 
|  | [6.9, 3.1, 5.4, 2.1, "virginica"], | 
|  | [6.7, 3.1, 5.6, 2.4, "virginica"], | 
|  | [6.9, 3.1, 5.1, 2.3, "virginica"], | 
|  | [5.8, 2.7, 5.1, 1.9, "virginica"], | 
|  | [6.8, 3.2, 5.9, 2.3, "virginica"], | 
|  | [6.7, 3.3, 5.7, 2.5, "virginica"], | 
|  | [6.7, 3.0, 5.2, 2.3, "virginica"], | 
|  | [6.3, 2.5, 5.0, 1.9, "virginica"], | 
|  | [6.5, 3.0, 5.2, 2.0, "virginica"], | 
|  | [6.2, 3.4, 5.4, 2.3, "virginica"], | 
|  | [5.9, 3.0, 5.1, 1.8, "virginica"] | 
|  | ]; | 
|  |  | 
|  | var GRID_WIDTH = 220; | 
|  | var GRID_HEIGHT = 220; | 
|  | var GAP = 20; | 
|  | var CATEGORY_DIM = 4; | 
|  | var CROSS_DIM_NUMBER = 4; | 
|  | var BASE_LEFT = 30; | 
|  | var BASE_TOP = 20; | 
|  | var SYMBOL_SIZE = 8; | 
|  |  | 
|  | function genData(data, dimX, dimY) { | 
|  | var result = []; | 
|  | for (var i = 0; i < data.length; i++) { | 
|  | result.push([data[i][dimX], data[i][dimY], data[i][CATEGORY_DIM]]); | 
|  | } | 
|  | return result; | 
|  | } | 
|  |  | 
|  | function getCategories(data) { | 
|  | var map = {}; | 
|  | var result = []; | 
|  | for (var i = 0; i < data.length; i++) { | 
|  | if (!map[data[i][CATEGORY_DIM]]) { | 
|  | map[data[i][CATEGORY_DIM]] = 1; | 
|  | } | 
|  | } | 
|  | for (var cate in map) { | 
|  | if (map.hasOwnProperty(cate)) { | 
|  | result.push(cate); | 
|  | } | 
|  | } | 
|  | return result; | 
|  | } | 
|  |  | 
|  | function genGrids(option) { | 
|  | var gridList = option.grid = []; | 
|  | var xAxisList = option.xAxis = []; | 
|  | var yAxisList = option.yAxis = []; | 
|  | var seriesList = option.series = []; | 
|  | var visualMapSeriesIndices = option.visualMap.seriesIndex = []; | 
|  | var axisPointerLinkList = option.axisPointer.link = []; | 
|  | var axisPointerLinkMap = {}; | 
|  |  | 
|  | for (var i = 0; i < CROSS_DIM_NUMBER; i++) { | 
|  | for (var j = 0; j < CROSS_DIM_NUMBER; j++) { | 
|  | var id = i + '-' + j; | 
|  |  | 
|  | var linkItem = axisPointerLinkMap['x' + i]; | 
|  | if (!linkItem) { | 
|  | linkItem = axisPointerLinkMap['x' + i] = {xAxisId: []}; | 
|  | axisPointerLinkList.push(linkItem); | 
|  | } | 
|  | linkItem.xAxisId.push(id); | 
|  |  | 
|  | var linkItem = axisPointerLinkMap['y' + j]; | 
|  | if (!linkItem) { | 
|  | linkItem = axisPointerLinkMap['y' + j] = {yAxisId: []}; | 
|  | axisPointerLinkList.push(linkItem); | 
|  | } | 
|  | linkItem.yAxisId.push(id); | 
|  |  | 
|  | gridList.push({ | 
|  | left: BASE_LEFT + i * (GRID_WIDTH + GAP), | 
|  | top: BASE_TOP + (CROSS_DIM_NUMBER - 1 - j) * (GRID_HEIGHT + GAP), | 
|  | width: GRID_WIDTH, | 
|  | height: GRID_HEIGHT | 
|  | }); | 
|  | xAxisList.push({ | 
|  | id: id, | 
|  | axisLine: { | 
|  | onZero: false | 
|  | }, | 
|  | axisTick: { | 
|  | show: j === 0 | 
|  | }, | 
|  | axisLabel: { | 
|  | show: j === 0 | 
|  | }, | 
|  | type: 'value', | 
|  | gridIndex: i * CROSS_DIM_NUMBER + j, | 
|  | scale: true | 
|  | }); | 
|  | yAxisList.push({ | 
|  | id: id, | 
|  | axisLine: { | 
|  | onZero: false | 
|  | }, | 
|  | axisTick: { | 
|  | show: i === 0 | 
|  | }, | 
|  | axisLabel: { | 
|  | show: i === 0 | 
|  | }, | 
|  | type: 'value', | 
|  | gridIndex: i * CROSS_DIM_NUMBER + j, | 
|  | scale: true | 
|  | }); | 
|  | seriesList.push({ | 
|  | type: 'scatter', | 
|  | symbolSize: SYMBOL_SIZE, | 
|  | xAxisIndex: i * CROSS_DIM_NUMBER + j, | 
|  | yAxisIndex: i * CROSS_DIM_NUMBER + j, | 
|  | data: genData(rawData, i, j) | 
|  | }); | 
|  | visualMapSeriesIndices.push(i * CROSS_DIM_NUMBER + j); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | var option = { | 
|  | legend: { | 
|  | data: ['scatter', 'scatter2', 'scatter3'] | 
|  | }, | 
|  | animation: false, | 
|  | brush: { | 
|  | brushLink: 'all' | 
|  | }, | 
|  | axisPointer: { | 
|  | show: true, | 
|  | snap: true, | 
|  | link: [], | 
|  | lineStyle: { | 
|  | type: 'dashed' | 
|  | } | 
|  | }, | 
|  | visualMap: { | 
|  | type: 'piecewise', | 
|  | categories: getCategories(rawData), | 
|  | dimension: 2, | 
|  | orient: 'horizontal', | 
|  | top: 0, | 
|  | left: 'center', | 
|  | inRange: { | 
|  | color: ['#c23531','#2f4554', '#61a0a8'] | 
|  | } | 
|  | }, | 
|  | tooltip: { | 
|  | trigger: 'item', | 
|  | extraCssText: 'max-width:400px; white-space: normal;', | 
|  | formatter: function (params) { | 
|  | if (echarts.util.isArray(params)) { | 
|  | var map = { | 
|  | x: {items: []}, | 
|  | y: {items: []} | 
|  | }; | 
|  | echarts.util.each(params, function (param) { | 
|  | var dim = param.axisDim; | 
|  | var mapItem = map[dim]; | 
|  | mapItem.axisValueLabel = param.axisValueLabel; | 
|  | mapItem.items.push( | 
|  | param.value[dim === 'x' ? 1 : 0] | 
|  | + ' ' + param.value[2] | 
|  | ); | 
|  | }); | 
|  | return map.x.axisValueLabel + '<br>(' + map.x.items.join(') (') + ')' | 
|  | + '<br><br>' | 
|  | + map.y.axisValueLabel + '<br>(' + map.y.items.join(') (') + ')'; | 
|  | } | 
|  | else { | 
|  | return params.name + ' ' + params.value; | 
|  | } | 
|  | } | 
|  | } | 
|  | }; | 
|  |  | 
|  | genGrids(option); | 
|  |  | 
|  | var mainEl = document.getElementById('main'); | 
|  | mainEl.style.height = BASE_TOP * 2 + CROSS_DIM_NUMBER * (GRID_HEIGHT + GAP) + 'px'; | 
|  | chart = myChart = echarts.init(mainEl); | 
|  | chart.setOption(option); | 
|  | }); | 
|  |  | 
|  | </script> | 
|  | </body> | 
|  | </html> |