| <!-- | |
| 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"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1" /> | |
| <link rel="stylesheet" href="lib/reset.css"/> | |
| <script src="lib/simpleRequire.js"></script> | |
| <script src="lib/config.js"></script> | |
| <script src="lib/facePrint.js"></script> | |
| </head> | |
| <body> | |
| <style> | |
| #main { | |
| width: 900px; | |
| height: 650px; | |
| border: 9px solid #eee; | |
| } | |
| </style> | |
| <div id="info"></div> | |
| <div id="main"></div> | |
| <script> | |
| /** | |
| * @see <https://en.wikipedia.org/wiki/Michelson%E2%80%93Morley_experiment> | |
| * @see <http://bl.ocks.org/mbostock/4061502> | |
| */ | |
| var chart; | |
| var data; | |
| var mean; | |
| require([ | |
| 'echarts', | |
| 'data/Michelson-Morley.json.js' | |
| ], function (echarts, rawData) { | |
| var env = echarts.env; | |
| chart = echarts.init(document.getElementById('main')); | |
| update('horizontal'); | |
| initControlPanel(env); | |
| function update(layout) { | |
| // mean = calculateMean(rawData); | |
| var categoryAxis = { | |
| type: 'category', | |
| boundaryGap: true, | |
| nameGap: 30, | |
| splitArea: { | |
| show: false | |
| }, | |
| splitLine: { | |
| show: false | |
| } | |
| }; | |
| var valueAxis = { | |
| type: 'value', | |
| name: 'km/s minus 299,000', | |
| splitArea: { | |
| show: true | |
| } | |
| }; | |
| chart.setOption({ | |
| aria: { | |
| show: true | |
| }, | |
| dataset: [{ | |
| source: rawData | |
| }, { | |
| transform: { | |
| type: 'boxplot', | |
| config: { itemNameFormatter: 'expr {value}' } | |
| } | |
| }, { | |
| fromDatasetIndex: 1, | |
| fromTransformResult: 1 | |
| }], | |
| title: [ | |
| { | |
| text: 'Michelson-Morley Experiment', | |
| left: 'center' | |
| }, | |
| { | |
| text: 'upper: Q3 + 1.5 * IRQ \nlower: Q1 - 1.5 * IRQ', | |
| borderColor: '#999', | |
| borderWidth: 1, | |
| textStyle: { | |
| fontSize: 14 | |
| }, | |
| left: '10%', | |
| top: '90%' | |
| } | |
| ], | |
| legend: { | |
| left: 'right' | |
| }, | |
| tooltip: { | |
| trigger: 'item', | |
| axisPointer: { | |
| type: 'shadow' | |
| } | |
| }, | |
| grid: { | |
| left: '10%', | |
| right: '10%', | |
| bottom: '15%' | |
| }, | |
| xAxis: layout === 'horizontal' ? categoryAxis : valueAxis, | |
| yAxis: layout === 'vertical' ? categoryAxis : valueAxis, | |
| series: [ | |
| { | |
| name: 'boxplot', | |
| type: 'boxplot', | |
| datasetIndex: 1, | |
| markPoint: { | |
| data: [ | |
| { | |
| name: '某个坐标', | |
| coord: [2, 300] | |
| }, | |
| { | |
| name: '某个屏幕坐标', | |
| x: 100, | |
| y: 200, | |
| label: { | |
| normal: { | |
| show: false, | |
| formatter: 'asdf' | |
| }, | |
| emphasis: { | |
| show: true, | |
| position: 'top', | |
| formatter: 'zxcv' | |
| } | |
| } | |
| }, | |
| { | |
| name: 'max value (default)', | |
| type: 'max' | |
| }, | |
| { | |
| name: 'min value (default)', | |
| type: 'min' | |
| }, | |
| { | |
| name: 'max value (dim:Q1)', | |
| type: 'max', | |
| valueDim: 'Q1' | |
| }, | |
| { | |
| name: 'average value (dim:Q1)', | |
| type: 'average', | |
| valueDim: 'Q1' | |
| } | |
| ] | |
| }, | |
| markLine: { | |
| data: [ | |
| [ | |
| {name: '两个坐标之间的标线', coord: [1, 240]}, | |
| {coord: [2, 260]} | |
| ], | |
| [ | |
| {name: '两个屏幕坐标之间的标线', x: 50, y: 60}, | |
| {x: 70, y: 90} | |
| ], | |
| [ | |
| {name: 'max - min', type: 'max'}, | |
| {type: 'min'} | |
| ], | |
| { | |
| name: 'min line', | |
| type: 'min' | |
| }, | |
| { | |
| name: 'max line on dim:Q3', | |
| type: 'max', | |
| valueDim: 'Q3' | |
| } | |
| ] | |
| } | |
| }, | |
| { | |
| name: 'outlier', | |
| type: 'scatter', | |
| datasetIndex: 2 | |
| } | |
| ] | |
| }); | |
| } | |
| // function calculateMean(rawData) { | |
| // var sum = 0; | |
| // var count = 0; | |
| // for (var i = 0, len = rawData.length; i < len; i++) { | |
| // for (var j = 0, lenj = rawData[i].length; j < lenj; j++) { | |
| // var value = rawData[i][j]; | |
| // count++; | |
| // if (!isNaN(value) && value != null && value !== '') { | |
| // sum += value; | |
| // } | |
| // } | |
| // } | |
| // return sum / count; | |
| // }; | |
| function initControlPanel(env) { | |
| if (!env.browser.ie || env.browser.ie.version > 8) { | |
| var scr = document.createElement('script'); | |
| scr.src = 'lib/dat.gui.min.js'; | |
| scr.onload = function () { | |
| var gui = new dat.GUI(); | |
| var config = { | |
| layout: 'horizontal' | |
| }; | |
| gui | |
| .add(config, 'layout', ['horizontal', 'vertical']) | |
| .onChange(update); | |
| }; | |
| document.head.appendChild(scr); | |
| } | |
| } | |
| }); | |
| </script> | |
| </body> | |
| </html> |