x
1
2
<html>
3
<head>
4
<meta charset="utf-8">
5
<title>结构树</title>
6
<script src="https://a.alipayobjects.com/jquery/jquery/1.11.1/jquery.js"></script>
7
<script src="https://gw.alipayobjects.com/as/g/datavis/g2/2.3.13/index.js"></script>
8
</head>
9
<body>
10
<div id="c1"></div>
11
<script>
12
var data = [{"name":"flare","children":[{"name":"analytics","children":[{"name":"cluster","children":[{"name":"AgglomerativeCluster","size":3938},{"name":"CommunityStructure","size":3812},{"name":"HierarchicalCluster","size":6714},{"name":"MergeEdge","size":743}]},{"name":"graph","children":[{"name":"BetweennessCentrality","size":3534},{"name":"LinkDistance","size":5731},{"name":"MaxFlowMinCut","size":7840},{"name":"ShortestPaths","size":5914},{"name":"SpanningTree","size":3416}]},{"name":"optimization","children":[{"name":"AspectRatioBanker","size":7074}]}]},{"name":"animate","children":[{"name":"Easing","size":17010},{"name":"FunctionSequence","size":5842},{"name":"interpolate","children":[{"name":"ArrayInterpolator","size":1983},{"name":"ColorInterpolator","size":2047},{"name":"DateInterpolator","size":1375},{"name":"Interpolator","size":8746},{"name":"MatrixInterpolator","size":2202},{"name":"NumberInterpolator","size":1382},{"name":"ObjectInterpolator","size":1629},{"name":"PointInterpolator","size":1675},{"name":"RectangleInterpolator","size":2042}]},{"name":"ISchedulable","size":1041},{"name":"Parallel","size":5176},{"name":"Pause","size":449},{"name":"Scheduler","size":5593},{"name":"Sequence","size":5534},{"name":"Transition","size":9201},{"name":"Transitioner","size":19975},{"name":"TransitionEvent","size":1116},{"name":"Tween","size":6006}]}]}];
13
var Layout = G2.Layout;
14
var Stat = G2.Stat;
15
var chart = new G2.Chart({
16
id: 'c1',
17
forceFit: true,
18
height: 450,
19
plotCfg: {
20
margin: [20,50]
21
}
22
});
23
// 不显示title
24
chart.tooltip({
25
title: null
26
});
27
// 不显示图例
28
chart.legend(false);
29
// 使用layout,用户可以自己编写自己的layout
30
// 仅约定输出的节点 存在 id,x,y字段即可
31
var layout = new Layout.Tree({
32
nodes: data
33
});
34
var nodes = layout.getNodes();
35
var edges = layout.getEdges();
36
// 首先绘制 edges,点要在边的上面
37
// 创建单独的视图
38
var edgeView = chart.createView();
39
edgeView.source(edges);
40
edgeView.coord().transpose(); //
41
edgeView.axis(false);
42
edgeView.tooltip(false);
43
// Stat.link 方法会生成 ..x, ..y的字段类型,数值范围是 0-1
44
edgeView.edge()
45
.position(Stat.link('source*target',nodes))
46
.shape('smooth')
47
.color('#ccc');
48
// 创建节点视图
49
var nodeView = chart.createView();
50
nodeView.coord().transpose(); //'polar'
51
nodeView.axis(false);
52
// 节点的x,y范围是 0,1
53
// 因为边的范围也是 0,1所以正好统一起来
54
nodeView.source(nodes, {
55
x: {min: 0,max:1},
56
y: {min: 0, max:1},
57
value: {min: 0}
58
});
59
nodeView.point().position('x*y').color('steelblue').size(3).label('name', {
60
offset: 5,
61
labelEmit: true
62
})
63
.tooltip('name');
64
chart.render();
65
</script>
66
</body>
67
</html>
68
结构树
正交布局的树图,展示的是Flare 软件包的子目录结构