图谱之前端关系应用

文章目录

    • 图谱之前端关系应用(relation-graph、d3.js、echarts)
      • 1. relation-graph
        • 应用实例
        • 优缺点
      • 2. d3.js
        • 应用实例
        • 优缺点
      • 3. echarts
        • 应用实例
        • 优缺点
      • 总结

图谱之前端关系应用(relation-graph、d3.js、echarts)

1. relation-graph

relation-graph 是专门用于展示关系图谱的库。

应用实例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF - 8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Relation Graph Example</title><script src="https://unpkg.com/relation-graph@latest/dist/relation-graph.min.js"></script><style>#graph {width: 800px;height: 600px;}</style>
</head><body><div id="graph"></div><script>const data = {nodes: [{ id: '1', label: 'Node 1' },{ id: '2', label: 'Node 2' },{ id: '3', label: 'Node 3' }],edges: [{ from: '1', to: '2' },{ from: '2', to: '3' },{ from: '1', to: '3' }]};const graph = new RelationGraph('#graph', {data: data,layout: {name: 'forceAtlas2Based'}});</script>
</body></html>
优缺点
  • 优点
    • 专注关系图谱:专门为展示关系图谱设计,对节点和边的处理有针对性的优化,能够很好地展示复杂的关系结构。
    • 易用性:提供了相对简洁的 API,开发者只需要按照规定的格式准备数据,并调用相应的方法,即可快速实现关系图谱的展示,降低了开发成本。
  • 缺点
    • 生态相对较小:相较于一些广泛使用的可视化库,如 d3.jsechartsrelation-graph 的用户群体相对较小,这可能导致在遇到问题时,较难在社区中找到相关的解决方案和支持。
    • 定制性受限:虽然它提供了一定程度的定制选项,但由于其专注于关系图谱这一特定领域,在一些特殊的可视化需求场景下,其定制性可能无法满足所有需求,相比之下,像 d3.js 这样灵活性较高的库在这方面更具优势。

2. d3.js

d3.js 是一个强大的基于数据操作文档的 JavaScript 库。

应用实例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF - 8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>D3.js Graph Example</title><script src="https://d3js.org/d3.v7.min.js"></script><style>svg {width: 800px;height: 600px;}circle {fill: steelblue;stroke: white;stroke-width: 1px;}line {stroke: gray;stroke-width: 1px;}text {fill: white;font-size: 12px;text-anchor: middle;dominant-baseline: middle;}</style>
</head><body><svg></svg><script>const data = {nodes: [{ id: '1', label: 'Node 1' },{ id: '2', label: 'Node 2' },{ id: '3', label: 'Node 3' }],edges: [{ from: '1', to: '2' },{ from: '2', to: '3' },{ from: '1', to: '3' }]};const svg = d3.select('svg');const width = +svg.attr('width');const height = +svg.attr('height');const simulation = d3.forceSimulation(data.nodes).force('link', d3.forceLink(data.edges).id(d => d.id))).force('charge', d3.forceManyBody()).force('center', d3.forceCenter(width / 2, height / 2));const link = svg.append('g').attr('class', 'links').selectAll('line').data(data.edges).join('line');const node = svg.append('g').attr('class', 'nodes').selectAll('circle').data(data.nodes).join('circle').attr('r', 10).call(d3.drag().on('start', dragStarted).on('drag', dragged).on('end', dragEnded)));node.append('text').text(d => d.label);simulation.on('tick', () => {link.attr('x1', d => d.source.x).attr('y1', d => d.source.y).attr('x2', d => d.target.x).attr('y2', d => d.target.y);node.attr('cx', d => d.x).attr('cy', d => d.y);});function dragStarted(d) {if (!d3.event.active) simulation.alphaTarget(0.3).restart();d.fx = d.x;d.fy = d.y;}function dragged(d) {d.fx = d3.event.x;d.fy = d3.event.y;}function dragEnded(d) {if (!d3.event.active) simulation.alphaTarget(0);d.fx = null;d.fy = null;}</script>
</body></html>
优缺点
  • 优点
    • 高度灵活性d3.js 提供了丰富的 API,允许开发者对文档的各个部分进行精细的操作和控制。这使得开发者能够根据具体需求,创建出各种独特的、高度定制化的可视化效果,无论是简单的图表还是复杂的关系图谱,都能轻松应对。
    • 数据驱动:其核心思想是数据驱动文档操作。通过将数据与文档元素进行绑定,开发者可以方便地根据数据的变化来动态更新可视化内容。这种数据驱动的方式使得可视化效果能够实时反映数据的状态和变化,大大增强了可视化的交互性和动态性。
    • 强大的布局算法d3.js 内置了多种常用的布局算法,如树形布局、力导向布局、圆形布局等。这些布局算法能够根据数据的结构和特点,自动计算出节点和边的位置和排列方式,从而实现美观、合理的可视化布局。对于展示知识图谱这种复杂的关系结构,力导向布局等算法能够有效地将节点和边分布在二维平面上,使得关系结构清晰可见,方便用户进行观察和分析。
  • 缺点
    • 学习曲线较陡:由于 d3.js 的 API 丰富且功能强大,这也导致其学习成本相对较高。对于初学者来说,需要花费大量的时间和精力去理解和掌握其核心概念、数据绑定方式、各种布局算法以及对文档元素的操作方法等。而且,d3.js 的代码结构和编程风格相对较为灵活,不同的开发者可能会采用不同的方式来实现相同的可视化效果,这也给初学者在学习和参考他人代码时带来了一定的困难。
    • 开发效率相对较低:在使用 d3.js 进行可视化开发时,由于其高度的灵活性和定制性,开发者往往需要手动编写大量的代码来实现各种功能和效果,包括数据处理、布局计算、元素绘制、交互设计等各个方面。相比之下,一些专门为特定类型的可视化设计的库,如 echarts 等,提供了更简洁、更高效的 API,开发者只需要按照规定的格式准备数据,并调用相应的方法,即可快速实现常见的可视化效果,大大提高了开发效率。因此,在项目时间紧、任务重,且对可视化效果的定制化要求不是特别高的情况下,选择使用 d3.js 可能会导致开发进度受到影响。

3. echarts

echarts 是一个由百度开源的,基于 JavaScript 的可视化图表库。

应用实例
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF - 8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ECharts Graph Example</title><script src="https://cdn.jsdelivr.net/npm/echarts@5.4.1/dist/echarts.min.js"></script><style>#main {width: 800px;height: 600px;}</style>
</head><body><div id="main"></div><script>const data = {nodes: [{ id: '1', name: 'Node 1' },{ id: '2', name: 'Node 2' },{ id: '3', name: 'Node 3' }],edges: [{ source: '1', target: '2' },{ source: '2', target: '3' },{ source: '1', target: '3' }]};const myChart = echarts.init(document.getElementById('main'));const option = {series: [{type: 'graph',layout: 'force',data: data.nodes,links: data.edges,force: {repulsion: 500},label: {show: true},lineStyle: {normal: {width: 1}}}]};myChart.setOption(option);</script>
</body></html>
优缺点
  • 优点
    • 简单易用echarts 提供了简洁明了的 API,开发者只需要按照规定的格式准备数据,并调用相应的方法,即可快速实现各种常见的可视化效果,包括柱状图、折线图、饼图、地图以及关系图谱等。对于初学者来说,无需深入了解复杂的可视化原理和图形绘制技术,就能够轻松上手并创建出美观实用的可视化图表,大大降低了开发成本和学习门槛。
    • 丰富的图表类型和主题echarts 内置了大量丰富多样的图表类型,涵盖了几乎所有常见的数据分析和可视化场景。无论是用于展示数据的分布情况、趋势变化、比例关系还是数据之间的关联关系等,开发者都能够在 echarts 中找到合适的图表类型来实现。此外,echarts 还提供了多种精美的主题样式,开发者可以根据项目的需求和风格,轻松切换不同的主题,使可视化图表在外观上更加美观、专业和个性化,满足不同用户对于可视化效果的多样化需求。
    • 良好的兼容性和扩展性echarts 在设计上充分考虑了兼容性问题,能够在多种主流浏览器上稳定运行,包括 Chrome、Firefox、Safari、Edge 等,同时也支持在不同的设备上进行展示,如桌面电脑、笔记本电脑、平板电脑和手机等,确保用户在各种环境下都能够正常访问和查看可视化图表。此外,echarts 还具有良好的扩展性,开发者可以通过自定义图表组件、渲染器、数据转换器等方式,对 echarts 的功能进行扩展和定制,以满足项目中一些特殊的可视化需求场景。这种良好的兼容性和扩展性使得 echarts 在实际项目开发中具有很高的适用性和灵活性,能够适应不同的项目需求和技术环境。
  • 缺点
    • 定制性相对有限:尽管 echarts 提供了一定程度的定制选项,开发者可以通过修改配置参数、使用自定义主题和样式等方式,对可视化图表的外观和一些基本行为进行定制。然而,相较于 d3.js 这种高度灵活且专注于底层图形操作的库,echarts 的定制性在一些复杂的、特殊的可视化需求场景下可能会受到一定的限制。例如,当开发者需要实现一些非常独特的交互效果、数据驱动的动态布局变化或者对图形的绘制过程进行深度定制时,echarts 的现有 API 和定制机制可能无法直接满足这些需求,需要开发者花费更多的时间和精力去寻找替代方案或者对 echarts 进行二次开发,这在一定程度上增加了开发的难度和成本。
    • 对大数据量处理能力有限:随着数据规模的不断增大,在可视化领域中对大数据量的处理能力成为了一个重要的考量因素。echarts 在处理大数据量时存在一定的局限性。当数据量较大时,echarts 的渲染性能会受到明显的影响,导致图表的加载速度变慢、交互响应不及时,甚至可能出现卡顿、崩溃等现象,严重影响用户体验。这主要是因为 echarts 的渲染机制和数据处理方式在设计上并没有充分考虑大数据量的场景,当面对大量的数据点时,其内部的计算和渲染过程会变得非常复杂和耗时,从而导致性能问题的出现。因此,在需要处理大数据量的可视化项目中,开发者需要谨慎考虑是否选择 echarts 作为可视化解决方案,或者需要结合其他技术手段来优化 echarts 对大数据量的处理能力。

总结

  • relation-graph:专注于关系图谱展示,使用方便,对关系结构的展示效果好。但生态相对较小,定制性受限,在处理特殊需求或复杂定制时可能力不从心。
  • d3.js:高度灵活,数据驱动,拥有强大的布局算法,能够实现各种高度定制化的可视化效果,对于展示复杂的关系图谱具有很大的优势。然而,其学习曲线较陡,开发效率相对较低,需要开发者具备较高的技术水平和编程经验,同时在项目时间紧张的情况下可能不太适用。
  • echarts:简单易用,提供了丰富的图表类型和主题,兼容性和扩展性良好,能够快速满足大多数常见的可视化需求,对于初学者和项目时间紧张的情况是一个不错的选择。但是,其定制性相对有限,对大数据量处理能力有限,在面对一些复杂的、特殊的可视化需求或者大数据量场景时,可能无法满足项目的全部要求,需要结合其他技术手段来解决问题。

在实际应用中,应根据项目的具体需求、开发者的技术水平以及时间和资源等因素,综合考虑选择合适的前端插件来展示知识图谱的关系图表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8S中Service详解(三)

HeadLiness类型的Service 在某些场景中&#xff0c;开发人员可能不想使用Service提供的负载均衡功能&#xff0c;而希望自己来控制负载均衡策略&#xff0c;针对这种情况&#xff0c;kubernetes提供了HeadLiness Service&#xff0c;这类Service不会分配Cluster IP&#xff0c;…

SpringBoot集成Flink-CDC,实现对数据库数据的监听

一、什么是 CDC &#xff1f; CDC 是Change Data Capture&#xff08;变更数据获取&#xff09;的简称。 核心思想是&#xff0c;监测并捕获数据库的变动&#xff08;包括数据或数据表的插入、 更新以及删除等&#xff09;&#xff0c;将这些变更按发生的顺序完整记录下来&…

2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计

题目来源&#xff1a;buuctf [RCTF2015]EasySQL1 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;初步思路为二次注入&#xff0c;在页面进行操作 step 2&#xff1a;尝试二次注入 step 3&#xff1a;已知双引号类型的字符型注入&#xff0c;构造…

C语言初阶牛客网刷题——HJ73 计算日期到天数转换【难度:简单】

1. 题目描述——HJ73 计算日期到天数转换 牛客网OJ题链接 描述 每一年中都有 12 个月份。其中&#xff0c;1,3,5,7,8,10,12 月每个月有 31 天&#xff1b; 4,6,9,11 月每个月有 30 天&#xff1b;而对于 2 月&#xff0c;闰年时有29 天&#xff0c;平年时有 28 天。 现在&am…

Flutter项目和鸿蒙平台的通信

Flutter项目和鸿蒙平台的通信 前言Flutter和Harmonyos通信MethodChannelBasicMessageChannelEventChannel 前言 大家在使用Flutter开发项目的时候&#xff0c; Flutter提供了Platfrom Channel API来和个个平台进行交互。 Flutter官方目前提供了一下三种方式来和个个平台交互&…

Unity自学之旅04

Unity自学之旅04 Unity自学之旅④&#x1f4dd; 跳跃&#x1f42f; 攻击&#x1f984; GUIGUI前置&#xff0c;显示收集物品数量和角色HpUGUI游戏暂停和重新开始 &#x1f917; 总结归纳 Unity自学之旅④ &#x1f4dd; 跳跃 public class PlayerBehaviorRigid : MonoBehavio…

Node.js——express中间件(全局中间件、路由中间件、静态资源中间件)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

10倍数据交付提升 | 通过逻辑数据仓库和数据编织高效管理和利用大数据

数据已经成为企业核心竞争力的关键要素。随着大数据技术的发展&#xff0c;如何高效管理和利用海量的数据&#xff0c;已成为企业在数字化转型过程中面临的重要课题。传统的数据仓库已经不能满足当今企业对数据处理的高效性、灵活性和实时性的需求。在这种背景下&#xff0c;逻…

PHP礼品兑换系统小程序

&#x1f381; 礼品兑换系统&#xff1a;革新企业礼品管理&#xff0c;专属神器来袭&#xff01; &#x1f4bb; 一款专为追求高效与个性化的现代企业量身打造的礼品兑换系统&#xff0c;它基于强大的ThinkPHP框架与前沿的Uniapp技术栈深度融合&#xff0c;不仅完美适配礼品卡…

【玩转全栈】----Django基本配置和介绍

目录 Django基本介绍&#xff1a; Django基本配置&#xff1a; 安装Django 创建项目 创建app 注册app Django配置路由URL Django创建视图 启动项目 Django基本介绍&#xff1a; Django是一个开源的、基于Python的高级Web框架&#xff0c;旨在以快速、简洁的方式构建高质量的Web…

RabbitMQ 高级特性

目录 1.消息确认 1.1 消息确认机制 1.2 手动确认方法 1. 2.1肯定确认 1.2.2 否定确认 1.3 SpringBoot 代码示例 1.3.1 配置确认机制 1.3.2 配置队列,交换机,绑定关系 1.3.3 生产者(向 rabbitmq 发送消息) 1.3.4 消费者(消费队列中的信息) 2.持久性 2.1 交换机…

QT:控件属性及常用控件(3)-----输入类控件(正则表达式)

输入类控件既可以进行显示&#xff0c;也能让用户输入一些内容&#xff01; 文章目录 1.Line Edit1.1 用户输入个人信息1.2 基于正则表达式的文本限制1.3 验证两次输入的密码是否一致1.4 让输入的密码可以被查看 2.Text Edit2.1 输入和显示同步2.1 其他信号出发情况 3.ComboBox…

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-添加内核编译

编译内核时将该 HDF 驱动编译到镜像中&#xff0c;接下来编写驱动编译脚本 Makefile&#xff0c;代码如下所示&#xff1a; 加入编译体系&#xff0c;填加模块目录到 drivers/hdf_core/adapter/khdf/linux/Makefile 文件 更多内容可以关注&#xff1a;迅为RK3568开发板篇OpenHa…

【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因

FFN&#xff08;前馈神经网络&#xff09;在Transformer模型中先升维再降维的设计具有多方面的重要原因&#xff0c;以下是对这些原因的总结&#xff1a; 1.目标与动机 高维映射空间&#xff1a;FFN的设计目的是通过一系列线性变换来拟合一个高维的映射空间&#xff0c;而不仅…

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集&#xff08;关键&#xff09;&#xff01;4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…

【Rabbitmq】Rabbitmq高级特性-发送者可靠性

Rabbitmq发送者可靠性 发送者重连发送者确认1.开启确认机制2.ReturnCallback3.ConfirmCallback MQ的可靠性数据持久化交换机持久化队列持久化消息持久化 Lazy Queue 总结其他文章 Rabbitmq提供了两种发送来保证发送者的可靠性&#xff0c;第一种叫发送者重连&#xff0c;第二种…

计算机网络 (55)流失存储音频/视频

一、定义与特点 定义&#xff1a;流式存储音频/视频是指经过压缩并存储在服务器上的多媒体文件&#xff0c;客户端可以通过互联网边下载边播放这些文件&#xff0c;也称为音频/视频点播。 特点&#xff1a; 边下载边播放&#xff1a;用户无需等待整个文件下载完成即可开始播放…

抖音小程序一键获取手机号

前端代码组件 <button v-if"!isFromOrderList"class"get-phone-btn" open-type"getPhoneNumber"getphonenumber"onGetPhoneNumber">一键获取</button>// 获取手机号回调onGetPhoneNumber(e) {var that this tt.login({f…

论文速读|NoteLLM: A Retrievable Large Language Model for Note Recommendation.WWW24

论文地址&#xff1a;https://arxiv.org/abs/2403.01744 bib引用&#xff1a; misc{zhang2024notellmretrievablelargelanguage,title{NoteLLM: A Retrievable Large Language Model for Note Recommendation}, author{Chao Zhang and Shiwei Wu and Haoxin Zhang and Tong Xu…

Day 15 卡玛笔记

这是基于代码随想录的每日打卡 222. 完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#x…