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 方法生成一个简单的柱状图

// 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text: '图谱示例'
            },
            tooltip: {},
            series: [{
               ...
                data: [],
                links:[]
            }]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);

3.配置

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

const options = {
  tooltip: {
    formatter: function (x) {
      return x.data.name;
    },
  },
  series: [
    {
      type: 'graph',
      layout: 'force',
      legendHoverLink: false, //是否启用图例 hover(悬停) 时的联动高亮。
      // hoverAnimation: true, //是否开启鼠标悬停节点的显示动画
      roam: true,
      draggable: true, //每个节点的拖拉
      edgeSymbol: ['circle', 'arrow'],
      edgeSymbolSize: [4, 10],
      force: {
        repulsion: 1550,
        gravity: 0.5, // 节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。
        edgeLength: [120, 240],
      },
      draggable: true,
      focusNodeAdjacency: true,
      lineStyle: {
        normal: {
          width: 2,
        },
      },
      edgeLabel: {
        normal: {
          show: true,
          formatter: function (x) {
            return x.value;
          },
        },
      },
      label: {
        normal: {
          show: true,
          position: 'inside',
          textStyle: {
            color: '#000',
            fontSize: 12,
          },
        },
      },
      data: [],
      links: [],
    },
  ],
};

4.数据处理

后台返回的数据有这种:

也有这种:

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

5.注意事项

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

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

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

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

const colorList =  [
  '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83',
  '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'
]
const colorListLen = colorList.length;

....

state.nodeNames.map(nodeName => {
      state.nodes.push({
        name: nodeName,
        symbolSize: Math.random() * 40 + 30,
        itemStyle:{
          color:colorList[Math.floor(Math.random()*colorListLen)]
        }
      });
    });

6.缺陷

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

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

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue Echarts实现知识图谱,我们可以使用Echarts中的力导向布局(force-directed layout)来展示知识图谱。 首先,我们需要安装Vue Echarts库,可以使用npm或yarn来安装。 然后,在Vue组件中引入Echarts组件,创建一个包含force-directed布局的图表。在该图表中,节点表示知识点,边表示知识点之间的联系。 下面是一个简单的Vue组件示例,展示如何使用Echarts的力导向布局来实现知识图谱: ```html <template> <div class="knowledge-graph"> <v-chart :options="chartOptions" /> </div> </template> <script> import { Chart } from 'vue-echarts'; export default { components: { 'v-chart': Chart, }, data() { return { chartOptions: { title: { text: '知识图谱', }, tooltip: {}, animationDurationUpdate: 1500, animationEasingUpdate: 'quinticInOut', series: [ { type: 'graph', layout: 'force', force: { repulsion: 100, edgeLength: 50, }, roam: true, label: { normal: { show: true, }, }, edgeSymbol: ['none', 'arrow'], edgeSymbolSize: 10, data: [ { name: '知识点1', symbolSize: 60 }, { name: '知识点2', symbolSize: 50 }, { name: '知识点3', symbolSize: 40 }, { name: '知识点4', symbolSize: 30 }, ], links: [ { source: '知识点1', target: '知识点2' }, { source: '知识点1', target: '知识点3' }, { source: '知识点2', target: '知识点4' }, { source: '知识点3', target: '知识点4' }, ], }, ], }, }; }, }; </script> ``` 在上面的示例中,我们使用了Echarts中的graph类型来创建知识图谱,使用了force类型的布局。通过设置repulsion和edgeLength参数,我们可以控制节点之间的间距和边的长度。通过设置edgeSymbol和edgeSymbolSize参数,我们可以控制边的样式和大小。 除了上述示例中的静态数据,我们还可以使用动态数据来展示知识图谱。例如,我们可以从后端API获取知识点和它们之间的联系,并动态更新图表。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值