|  |  | 
|  | <!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:1200px; 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/testHelper.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.nodes) { | 
|  | d3.pack() | 
|  | .size([api.getWidth() - 2, api.getHeight() - 2]) | 
|  | .padding(3)(root); | 
|  |  | 
|  | context.nodes = {}; | 
|  | root.descendants().forEach(function (node, index) { | 
|  | context.nodes[node.id] = { | 
|  | index: index, | 
|  | node: node | 
|  | } | 
|  | }); | 
|  | } | 
|  |  | 
|  | var nodePath = api.value(2); | 
|  | var node = context.nodes[nodePath].node; | 
|  | var isLeaf = !node.children || !node.children.length; | 
|  |  | 
|  | var textFont = api.font({ | 
|  | fontSize: 12, | 
|  | fontFamily: 'Arial' | 
|  | }); | 
|  |  | 
|  | var focus = new Uint32Array(node.descendants().map(function (node) { | 
|  | return context.nodes[node.id].index; | 
|  | })); | 
|  |  | 
|  | var nodeName = isLeaf ? nodePath.slice(nodePath.lastIndexOf('.') + 1).split(/(?=[A-Z][^A-Z])/g).join('\n') : ''; | 
|  |  | 
|  | var z2 = api.value(1) * 2; | 
|  |  | 
|  | return { | 
|  | type: 'circle', | 
|  | focus: focus, | 
|  | shape: { | 
|  | cx: node.x, | 
|  | cy: node.y, | 
|  | r: node.r | 
|  | }, | 
|  | z2: z2, | 
|  | textContent: { | 
|  | type: 'text', | 
|  | style: { | 
|  | text: nodeName, | 
|  | width: node.r * 1.3, | 
|  | overflow: 'truncate', | 
|  | fontSize: node.r / 3 | 
|  | // fill: 'blue' | 
|  | }, | 
|  | emphasis: { | 
|  | style: { | 
|  | overflow: null, | 
|  | fontSize: Math.max(node.r / 3, 12) | 
|  | // fill: 'red' | 
|  | } | 
|  | } | 
|  | }, | 
|  | textConfig: { | 
|  | position: 'inside' | 
|  | }, | 
|  | style: { | 
|  | fill: api.visual('color'), | 
|  | text: nodeName, | 
|  | font: textFont, | 
|  | }, | 
|  | emphasis: { | 
|  | style: { | 
|  | font: textFont, | 
|  | shadowBlur: 20, | 
|  | shadowOffsetX: 3, | 
|  | shadowOffsetY: 5, | 
|  | shadowColor: 'rgba(0,0,0,0.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> |