<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 引入 ECharts 文件 -->
<script src="echarts.min.js"></script>
</head>
</html>
複製代碼
我是在react項目中直接npm了echarts, 因此在入口文件直接按需加載須要使用的Graph圖html
// 引入 ECharts 主模塊
import echarts from 'echarts/lib/echarts';
// 引入思惟圖
import 'echarts/lib/chart/graph';
import 'echarts/lib/component/tooltip';
import 'echarts/lib/component/title';
複製代碼
1.爲畫布準備一個dom元素 設置寬高node
<body>
<!-- 爲 ECharts 準備一個具有大小(寬高)的 DOM -->
<div id="main" style="width: 600px;height:400px;"></div>
</body>
複製代碼
2.在js中獲取dom元素,初始化畫布react
var myChart = echarts.init(document.getElementById('main'));
複製代碼
以後再經過echarts的setOpton填入數據便可。webpack
須要倒入的數據爲兩部分:web
後端傳來的link值按格式引入,官方例子以下:npm
links: [{
source: '節點1',
target: '節點3'
}, {
source: '節點2',
target: '節點3'
}, {
source: '節點2',
target: '節點4'
}, {
source: '節點1',
target: '節點4'
}]
複製代碼
將後端數據push進link集:後端
let links = [];
for(var i in data.relation){
links.push({
source : data.relation[i].source,
target : data.relation[i].target
});
}
複製代碼
節點數據是須要給出節點的座標來造成最後的畫布的,這個座標須要咱們根據本身的實際的數據層級以及每一個層級的個數來計算。數組
首先畫布的大小是固定的,在這裏我用的是寬600px,高400px。畫布的是以坐上角爲座標原點。假設數據是層級是5層,從1到第5層級的數量以此爲2,3,4,1,1 計算過程以下:bash
data2.push({
name : data.tasks[i].alias,
value : data.tasks[i].task_name,
y: 0,
x: 600-(120 * data.tasks[i].level),
itemStyle:{
normal:{color: color}
}
})
}
複製代碼
使用echarts的setOption方法繪製圖標:echarts
myChart.setOption({
title: {
text: ''
},
tooltip: {},
nodeScaleRatio: 0,
animationDurationUpdate: 1500,
animationEasingUpdate: 'quinticInOut',
series : [
{
type: 'graph',
layout: 'none',
symbolSize: 30,
roam: false,
label: {
normal: {
show: true
}
},
edgeSymbol: ['circle', 'arrow'],
edgeSymbolSize: [4, 10],
edgeLabel: {
normal: {
textStyle: {
fontSize: 20
}
}
},
data: data2,
// links: [],
links: links,
lineStyle: {
normal: {
opacity: 0.9,
width: 1,
curveness: 0
}
}
}
]
});
複製代碼
還能夠給節點添加事件 這裏選擇點擊事件來展現節點詳情信息,代碼以下:
myChart.on("click", function (param){
if(param.dataType == "node"){
_this.setState({visible: true, param: param.data.value});
}
});
複製代碼
若是你要在這裏使用react的this.setState({});方法來更新組件狀態的話別忘記在setOption以前,提早將this賦值給一個變量,由於在這裏的點擊方法裏this指向的是myChart。
let _this = this;
複製代碼
成品就是這個樣子的
完事兒,筆芯!敬禮!!!