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