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