163 lines
6.3 KiB
HTML
163 lines
6.3 KiB
HTML
|
<html>
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<script src="esl.js"></script>
|
||
|
<script src="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/gexf',
|
||
|
|
||
|
'echarts/chart/graph',
|
||
|
|
||
|
'echarts/component/title',
|
||
|
'echarts/component/legend',
|
||
|
'echarts/component/geo',
|
||
|
'echarts/component/tooltip',
|
||
|
'echarts/component/visualMap',
|
||
|
|
||
|
'theme/vintage'
|
||
|
], function (echarts, gexf) {
|
||
|
|
||
|
var chart = echarts.init(document.getElementById('main'), 'vintage', {
|
||
|
renderer: 'canvas'
|
||
|
});
|
||
|
|
||
|
$.get('./data/les-miserables.gexf', function (xml) {
|
||
|
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 = {
|
||
|
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,
|
||
|
roam: true,
|
||
|
draggable: true,
|
||
|
itemStyle: {
|
||
|
normal: {
|
||
|
borderColor: '#fff',
|
||
|
borderWidth: 2,
|
||
|
shadowBlur: 10,
|
||
|
shadowColor: 'rgba(0, 0, 0, 0.3)'
|
||
|
}
|
||
|
},
|
||
|
focusNodeAdjacency: true,
|
||
|
// edgeSymbol: ['none', 'arrow'],
|
||
|
// scaleLimit: {
|
||
|
// min: 1.5,
|
||
|
// max: 2
|
||
|
// },
|
||
|
label: {
|
||
|
normal: {
|
||
|
position: 'right',
|
||
|
formatter: '{b}'
|
||
|
}
|
||
|
},
|
||
|
lineStyle: {
|
||
|
normal: {
|
||
|
color: 'source',
|
||
|
curveness: 0.3
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
|
||
|
chart.setOption(option);
|
||
|
|
||
|
var config = {
|
||
|
layout: 'none',
|
||
|
focusNodeAdjacency: true,
|
||
|
manualFocusNodeAdjacency: function () {
|
||
|
chart.dispatchAction({
|
||
|
type: 'focusNodeAdjacency',
|
||
|
seriesName: 'Les Miserables',
|
||
|
dataIndex: 2
|
||
|
});
|
||
|
},
|
||
|
manualUnfocusNodeAdjacency: function () {
|
||
|
chart.dispatchAction({
|
||
|
type: 'unfocusNodeAdjacency',
|
||
|
seriesName: 'Les Miserables'
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
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',
|
||
|
focusNodeAdjacency: value
|
||
|
}]
|
||
|
});
|
||
|
});
|
||
|
gui.add(config, 'manualFocusNodeAdjacency');
|
||
|
gui.add(config, 'manualUnfocusNodeAdjacency');
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|