当前位置:   article > 正文

echarts实现知识图谱_echarts 知识图谱

echarts 知识图谱

实现知识图谱可视化采取的开源库是echarts。相对其他工具来说,echarts是百度开源工具,API封装完善,简单好用,易上手。这也是我们为什么选择echarts作工具的原因。

实现步骤:

  1. 获取echarts,引入到项目中
npm install echarts --save
import * as echarts from 'echarts';

2.初始化

在绘图前我们需要为 ECharts 准备一个具备高宽的 DOM 容器。

<div id="main" style="width: 600px;height:400px;"></div>

然后就可以通过 echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的柱状图

  1. // 基于准备好的dom,初始化echarts实例
  2. var myChart = echarts.init(document.getElementById('main'));
  3. // 指定图表的配置项和数据
  4. var option = {
  5. title: {
  6. text: '图谱示例'
  7. },
  8. tooltip: {},
  9. series: [{
  10. ...
  11. data: [],
  12. links:[]
  13. }]
  14. };
  15. // 使用刚指定的配置项和数据显示图表。
  16. myChart.setOption(option);

3.配置

知识图谱要将实体与实体,本体与本体之间的关系可视化。根据业务需求,我们选取echarts关系图

  1. const options = {
  2. tooltip: {
  3. formatter: function (x) {
  4. return x.data.name;
  5. },
  6. },
  7. series: [
  8. {
  9. type: 'graph',
  10. layout: 'force',
  11. legendHoverLink: false, //是否启用图例 hover(悬停) 时的联动高亮。
  12. // hoverAnimation: true, //是否开启鼠标悬停节点的显示动画
  13. roam: true,
  14. draggable: true, //每个节点的拖拉
  15. edgeSymbol: ['circle', 'arrow'],
  16. edgeSymbolSize: [4, 10],
  17. force: {
  18. repulsion: 1550,
  19. gravity: 0.5, // 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。
  20. edgeLength: [120, 240],
  21. },
  22. draggable: true,
  23. focusNodeAdjacency: true,
  24. lineStyle: {
  25. normal: {
  26. width: 2,
  27. },
  28. },
  29. edgeLabel: {
  30. normal: {
  31. show: true,
  32. formatter: function (x) {
  33. return x.value;
  34. },
  35. },
  36. },
  37. label: {
  38. normal: {
  39. show: true,
  40. position: 'inside',
  41. textStyle: {
  42. color: '#000',
  43. fontSize: 12,
  44. },
  45. },
  46. },
  47. data: [],
  48. links: [],
  49. },
  50. ],
  51. };

4.数据处理

后台返回的数据有这种:

也有这种:

不管哪种,显然不符合我们前端需要的数据。所以我们需要把数据处理成我们想要的数据:

5.注意事项

处理数据时我们要注意,节点和节点的关系要对应,否则无法渲染出来;

数据量大时,echarts的节点颜色无法自动显示,解决办法一是在和series同级的地方增加属性color

color: ["#7EC0EE", "#FF9F7F", "#FFD700", "#C9C9C9", "#E066FF", "#C0FF3E"]

但有时这种办法也没有办法完全解决,可采用另一种方法:

  1. const colorList = [
  2. '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83',
  3. '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'
  4. ]
  5. const colorListLen = colorList.length;
  6. ....
  7. state.nodeNames.map(nodeName => {
  8. state.nodes.push({
  9. name: nodeName,
  10. symbolSize: Math.random() * 40 + 30,
  11. itemStyle:{
  12. color:colorList[Math.floor(Math.random()*colorListLen)]
  13. }
  14. });
  15. });

6.缺陷

虽然echarts基本满足可视化要求,但是在数据量较大时,会出现渲染较慢,浏览器卡顿的情况。一般我们的解决方案时分片渲染。然而遗憾的是,分片渲染echarts只支持限定的几个图表类型,这是官网的描述:

所以这也是比较遗憾和后续有待改进的地方。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/489512?site
推荐阅读