200 lines
6.4 KiB
HTML
Generated
200 lines
6.4 KiB
HTML
Generated
<!--
|
|
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">
|
|
<script src="lib/simpleRequire.js"></script>
|
|
<script src="lib/config.js"></script>
|
|
<script src="lib/jquery.min.js"></script>
|
|
<script src="lib/dat.gui.min.js"></script>
|
|
</head>
|
|
<body>
|
|
<style>
|
|
html, body, #main {
|
|
width: 100%;
|
|
height: 100%;
|
|
margin: 0;
|
|
}
|
|
</style>
|
|
<div id="main"></div>
|
|
<script>
|
|
|
|
require([
|
|
'echarts',
|
|
'extension/dataTool',
|
|
'./data/les-miserables.gexf',
|
|
'theme/vintage'
|
|
], function (echarts, dataTool, xml) {
|
|
var gexf = dataTool.gexf;
|
|
var chart = echarts.init(document.getElementById('main'), 'vintage');
|
|
|
|
var graph = gexf.parse(xml);
|
|
var categories = [];
|
|
for (var i = 0; i < 9; i++) {
|
|
categories[i] = {
|
|
name: '类目' + i
|
|
};
|
|
}
|
|
graph.nodes.forEach(function (node) {
|
|
delete node.itemStyle;
|
|
node.value = node.symbolSize;
|
|
node.label = {
|
|
normal: {
|
|
show: node.symbolSize > 30
|
|
},
|
|
emphasis: {
|
|
show: true
|
|
}
|
|
};
|
|
node.category = node.attributes['modularity_class'];
|
|
});
|
|
graph.links.forEach(function (link) {
|
|
delete link.lineStyle;
|
|
});
|
|
var option = {
|
|
aria: {
|
|
show: true,
|
|
description: 'Les Miserables 的关系主要分为六个区域,这张图描述了他们之间的相互关联。'
|
|
},
|
|
tooltip: {},
|
|
legend: [{
|
|
// selectedMode: 'single',
|
|
data: categories.map(function (a) {
|
|
return a.name;
|
|
})
|
|
}],
|
|
animationDurationUpdate: 1500,
|
|
animationEasingUpdate: 'quinticInOut',
|
|
series : [
|
|
{
|
|
name: 'Les Miserables',
|
|
type: 'graph',
|
|
layout: 'none',
|
|
data: graph.nodes,
|
|
links: graph.links,
|
|
categories: categories,
|
|
cursor: 'crosshair',
|
|
roam: true,
|
|
draggable: true,
|
|
itemStyle: {
|
|
normal: {
|
|
borderColor: '#fff',
|
|
borderWidth: 2,
|
|
shadowBlur: 10,
|
|
shadowColor: 'rgba(0, 0, 0, 0.3)'
|
|
}
|
|
},
|
|
emphasis: {
|
|
focus: 'adjacency'
|
|
},
|
|
// edgeSymbol: ['none', 'arrow'],
|
|
// scaleLimit: {
|
|
// min: 1.5,
|
|
// max: 2
|
|
// },
|
|
label: {
|
|
normal: {
|
|
position: 'right',
|
|
formatter: '{b}'
|
|
}
|
|
},
|
|
lineStyle: {
|
|
normal: {
|
|
color: 'source',
|
|
curveness: 0.3
|
|
},
|
|
emphasis: {
|
|
width: 10
|
|
}
|
|
}
|
|
}
|
|
]
|
|
};
|
|
|
|
chart.setOption(option);
|
|
|
|
var config = {
|
|
layout: 'none',
|
|
focusNodeAdjacency: true,
|
|
manualFocusNodeAdjacency: function () {
|
|
chart.dispatchAction({
|
|
type: 'highlight',
|
|
seriesName: 'Les Miserables',
|
|
dataIndex: 2
|
|
});
|
|
},
|
|
manualUnfocusNodeAdjacency: function () {
|
|
chart.dispatchAction({
|
|
type: 'downplay',
|
|
seriesName: 'Les Miserables'
|
|
});
|
|
},
|
|
'circular.rotateLabel': false
|
|
};
|
|
|
|
// wrong dataType test case
|
|
chart.dispatchAction({type: 'highlight',dataIndex: [0,1,2,3],dataType:'edges'})
|
|
|
|
// chart.dispatchAction({type: 'highlight',dataIndex: [0,1,2,3], dataType: 'node'})
|
|
|
|
// chart.on('mouseover', function (params) {
|
|
// chart.dispatchAction({type: 'highlight',dataIndex: [0,1,2,3],dataType:'edge'})
|
|
// });
|
|
chart.on('click', function (params) {
|
|
console.log(params, params.data);
|
|
});
|
|
|
|
var gui = new dat.GUI();
|
|
gui.add(config, 'layout', ['none', 'circular'])
|
|
.onChange(function (value) {
|
|
chart.setOption({
|
|
series: [{
|
|
name: 'Les Miserables',
|
|
layout: value
|
|
}]
|
|
});
|
|
});
|
|
gui.add(config, 'focusNodeAdjacency')
|
|
.onChange(function (value) {
|
|
chart.setOption({
|
|
series: [{
|
|
name: 'Les Miserables',
|
|
emphasis: {
|
|
focus: config.focusNodeAdjacency ? 'adjacency' : null
|
|
}
|
|
}]
|
|
});
|
|
});
|
|
gui.add(config, 'manualFocusNodeAdjacency');
|
|
gui.add(config, 'manualUnfocusNodeAdjacency');
|
|
gui.add(config, 'circular.rotateLabel')
|
|
.onChange(function (value) {
|
|
chart.setOption({
|
|
series: [{
|
|
name: 'Les Miserables',
|
|
circular: {rotateLabel: !!value}
|
|
}]
|
|
});
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|