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