|  | 
 | <!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. | 
 | --> | 
 |  | 
 |  | 
 | <meta charset="utf-8"> | 
 | <style> | 
 |  | 
 | text { | 
 |     font: 10px sans-serif; | 
 |     text-anchor: middle; | 
 | } | 
 |  | 
 | .node--hover circle { | 
 |     stroke: #000; | 
 |     stroke-width: 1.2px; | 
 | } | 
 |  | 
 | #main { | 
 |     width: 1000px; | 
 |     height: 500px; | 
 | } | 
 | </style> | 
 |  | 
 |  | 
 | <div id="main" style="width:960px; height:960px;"></div> | 
 |  | 
 | <svg width="960" height="960"><g transform="translate(1,1)"></g></svg> | 
 | <script src="https://d3js.org/d3.v4.min.js"></script> | 
 | <script src="../dist/echarts.js"></script> | 
 | <script src="./lib/config.js"></script> | 
 | <script> | 
 |  | 
 | var stratify = d3.stratify() | 
 |     .parentId(function(d) { | 
 |         return d.id.substring(0, d.id.lastIndexOf(".")); | 
 |     }); | 
 |  | 
 | d3.csv("data/flare.csv", function(error, rawData) { | 
 |     if (error) throw error; | 
 |  | 
 |     var root = stratify(rawData) | 
 |         .sum(function(d) { | 
 |             return d.value; | 
 |         }) | 
 |         .sort(function(a, b) { | 
 |             return b.value - a.value; | 
 |         }); | 
 |     var maxDepth = 0; | 
 |     var seriesData = root.descendants().map(function (node) { | 
 |         maxDepth = Math.max(maxDepth, node.depth); | 
 |         return [ | 
 |             node.value, | 
 |             node.depth, | 
 |             node.id | 
 |         ]; | 
 |     }); | 
 |  | 
 |     var chart = echarts.init(document.getElementById('main')); | 
 |  | 
 |     function renderItem(params, api) { | 
 |         var context = params.context; | 
 |         if (!context.layout) { | 
 |             d3.pack() | 
 |                 .size([api.getWidth() - 2, api.getHeight() - 2]) | 
 |                 .padding(3)(root); | 
 |  | 
 |             context.layout = {}; | 
 |             root.descendants().forEach(function (node) { | 
 |                 context.layout[node.id] = { | 
 |                     x: node.x, | 
 |                     y: node.y, | 
 |                     r: node.r, | 
 |                     isLeaf: !node.children || !node.children.length | 
 |                 }; | 
 |             }); | 
 |         } | 
 |  | 
 |         var nodePath = api.value(2); | 
 |         var itemLayout = context.layout[nodePath]; | 
 |  | 
 |         var nodeName = ''; | 
 |         var textFont = api.font({ | 
 |             fontSize: 12, | 
 |             fontFamily: 'Arial' | 
 |         }); | 
 |  | 
 |         if (itemLayout.isLeaf && itemLayout.r > 10) { | 
 |             nodeName = nodePath.slice(nodePath.lastIndexOf('.') + 1).split(/(?=[A-Z][^A-Z])/g).join('\n'); | 
 |             nodeName = echarts.format.truncateText(nodeName, itemLayout.r, textFont, '.'); | 
 |         } | 
 |  | 
 |         return { | 
 |             type: 'circle', | 
 |             shape: { | 
 |                 cx: itemLayout.x, | 
 |                 cy: itemLayout.y, | 
 |                 r: itemLayout.r | 
 |             }, | 
 |             z2: api.value(1) * 2, | 
 |             style: api.style({ | 
 |                 text: nodeName, | 
 |                 textFont: textFont, | 
 |                 textPosition: 'inside' | 
 |             }), | 
 |             styleEmphasis: api.style({ | 
 |                 text: nodeName, | 
 |                 textPosition: 'inside', | 
 |                 textFont: textFont, | 
 |                 stroke: 'rgba(0,0,0,0.5)', | 
 |                 lineWidth: 3 | 
 |             }) | 
 |         }; | 
 |     } | 
 |  | 
 |     var option = { | 
 |         tooltip: {}, | 
 |         visualMap: { | 
 |             show: false, | 
 |             min: 0, | 
 |             max: maxDepth, | 
 |             dimension: 1, | 
 |             inRange: { | 
 |                 color: ['#006edd', '#e0ffff'] | 
 |             } | 
 |         }, | 
 |         series: { | 
 |             type: 'custom', | 
 |             renderItem: renderItem, | 
 |             coordinateSystem: null, | 
 |             encode: { | 
 |                 tooltip: 0, | 
 |                 itemName: 2 | 
 |             }, | 
 |             data: seriesData | 
 |         } | 
 |     }; | 
 |  | 
 |     chart.setOption(option); | 
 |  | 
 | }); | 
 |  | 
 | </script> |