当前位置:   article > 正文

基于Django,用echarts实现可视化知识图谱_echarts实现知识图谱可视化过程

echarts实现知识图谱可视化过程

django后端中的数据,通过echarts传输到前端,实现知识图谱的可视化

1.views.py(数据只是放个demo)

  1. from django.shortcuts import render
  2. def kg_view(request):
  3. data_nodes=[
  4. {'name': '2.2市防指成员单位及职责', 'des': '2.2市防指成员单位及职责', 'symbolSize': 70, 'category': 0},
  5. {'name': '电信建德分公司、移动建德分公司、联通建德分公司', 'des': '电信建德分公司、移动建德分公司、联通建德分公司','symbolSize': 70, 'category': 0},
  6. {'name': '防汛抢险指挥和灾害救援过程', 'des': '防汛抢险指挥和灾害救援过程', 'symbolSize': 70, 'category': 0},
  7. {'name': '通讯平台', 'des': '通讯平台', 'symbolSize': 70, 'category': 0},
  8. {'name': '防汛防台抗旱信息网络平台', 'des': '防汛防台抗旱信息网络平台', 'symbolSize': 70, 'category': 0},
  9. {'name': '所辖通信设施防台', 'des': '所辖通信设施防台', 'symbolSize': 70, 'category': 0},
  10. {'name': '所辖通信设施防汛', 'des': '所辖通信设施防汛', 'symbolSize': 70, 'category': 0}
  11. ]
  12. data_links=[
  13. {'source': '2.2市防指成员单位及职责', 'target': '电信建德分公司、移动建德分公司、联通建德分公司', 'name': '包括', 'des': ''},
  14. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '防汛抢险指挥和灾害救援过程','name': '应急通信保障', 'des': ''},
  15. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '通讯平台', 'name': '保障安全', 'des': ''},
  16. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '防汛防台抗旱信息网络平台','name': '保障安全', 'des': ''},
  17. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '所辖通信设施防台', 'name': '灾后抢修', 'des': ''},
  18. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '所辖通信设施防汛', 'name': '灾后抢修','des': ''},
  19. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '所辖通信设施防台', 'name': '安全管理', 'des': ''},
  20. {'source': '电信建德分公司、移动建德分公司、联通建德分公司', 'target': '所辖通信设施防汛', 'name': '安全管理','des': ''}
  21. ]
  22. data_json = {
  23. "data_nodes": data_nodes,
  24. "data_links": data_links,
  25. }
  26. return render(request, 'kg_view.html', data_json)

2.html部分

  1. <!DOCTYPE html>
  2. {% load static %}
  3. <html lang="">
  4. <head>
  5. <title>知识图谱</title>
  6. <meta charset="utf-8">
  7. <script type="text/javascript" src="{% static 'js/jquery-3.5.1.min.js' %}"></script>
  8. <script type="text/javascript" src="{% static 'js/echarts.min.js' %}"></script>
  9. </head>
  10. <body>
  11. <div class="container">
  12. <div class="text-box">{{ answer }}</div>
  13. <div id="chart-container" style="width: 600px;height:400px;"></div>
  14. </div>
  15. <script >
  16. var myChart = echarts.init(document.getElementById('chart-container'));
  17. var categories = [{name:"节点"}];
  18. option = {
  19. // 图的标题
  20. title: {
  21. text: '课程知识图谱'
  22. },
  23. // 提示框的配置
  24. tooltip: {
  25. formatter: function (x) {
  26. return x.data.des;
  27. }
  28. },
  29. // 工具箱
  30. toolbox: {
  31. // 显示工具箱
  32. show: true,
  33. feature: {
  34. mark: {
  35. show: true
  36. },
  37. // 还原
  38. restore: {
  39. show: true
  40. },
  41. // 保存为图片
  42. saveAsImage: {
  43. show: true
  44. }
  45. }
  46. },
  47. legend: [{
  48. // selectedMode: 'single',
  49. //设置可以根据类别显示or隐藏节点
  50. data: categories.map(function (a) {
  51. return a.name;
  52. })
  53. }],
  54. series: [{
  55. type: 'graph', // 类型:关系图
  56. layout: 'force', //图的布局,类型为力导图
  57. symbolSize: 30, // 调整节点的大小
  58. roam: true, // 是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启
  59. edgeSymbol: ['circle', 'arrow'],
  60. edgeSymbolSize: [2, 10],
  61. edgeLabel: {
  62. normal: {
  63. show: true,
  64. formatter: function (x) {
  65. return x.data.name;
  66. },
  67. textStyle: {
  68. fontSize: 10
  69. }
  70. }
  71. },
  72. force: {
  73. repulsion: 2500,
  74. edgeLength: [10, 50]
  75. },
  76. draggable: true,
  77. lineStyle: {
  78. normal: {
  79. width: 2,
  80. color: '#4b565b',
  81. }
  82. },
  83. label: {
  84. normal: {
  85. show: true,
  86. textStyle: {}
  87. }
  88. },
  89. // 数据
  90. data: [
  91. {% for temp in data_nodes %}
  92. {
  93. name: '{{ temp.name }}',
  94. des: '{{ temp.des }}',
  95. symbolSize: 70,
  96. category: 0,
  97. url:"https://yiyan.baidu.com/"
  98. },
  99. {% endfor %}
  100. ],
  101. links: [
  102. {% for temp in data_links %}
  103. {
  104. source: '{{ temp.source }}',
  105. target: '{{ temp.target }}',
  106. name: '{{ temp.name }}',
  107. des:''
  108. },
  109. {% endfor %}], //定义关系,后续省略
  110. categories: categories,//给类别赋值
  111. }]
  112. }
  113. myChart.setOption(option);
  114. myChart.on("click", function (params) {
  115. console.log(params);
  116. {#点击跳转链接#}
  117. window.location.href = params.data.url;
  118. {#点击出现弹窗#}
  119. {#alert("你点击了:" + params.name); // params.name 是点击元素的名称#}
  120. });
  121. </script>
  122. </body>
  123. </html>

其中,js文件如下:

html中,前后端数据交互部分如下:

3.效果

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

闽ICP备14008679号