首页 > 其他分享 >d3.js生成知识图谱--实现节点的颜色分类,节点点击事件处理

d3.js生成知识图谱--实现节点的颜色分类,节点点击事件处理

时间:2024-07-16 14:26:15浏览次数:14  
标签:事件处理 name -- text tooltip d3 type 节点

首先看一下节点的数据内容:

nodes: [
        {id: 1, name: '刘备', type: '皇上'},
        {id: 2, name: '关羽', type: '将军'},
        {id: 3, name: '张飞', type: '将军'},
        {id: 4, name: '诸葛亮', type: '丞相'},
        {id: 5, name: '小兵1', type: '士兵'},
        {id: 6, name: '小兵2', type: '士兵'},
      ],
      links: [
        {source: 1, target: 2, relate: '将军'},
        {source: 1, target: 3, relate: '将军'},
        {source: 1, target: 4, relate: '丞相'},
        {source: 2, target: 5, relate: '下属'},
        {source: 2, target: 6, relate: '下属'},
        {source: 3, target: 5, relate: '下属'},
      ],

节点颜色分类实现

根据节点的type属性进行分类,d3.scaleOrdinal(d3.schemeCategory10): 这一部分使用 D3 中的 scaleOrdinal 函数创建了一个序数比例尺,并使用 d3.schemeCategory10 作为颜色方案,通常我们会使用 scale.domain() 来指定比例尺的输入范围

      this.colorScale = d3.scaleOrdinal(d3.schemeCategory10)
        .domain(this.nodes.map(d => d.type));
node.append('circle')
        .attr('r', 18)
        .attr('fill', 'steelblue')
        .style('fill', d => this.colorScale(d.type))

实现效果如下

在这里插入图片描述

节点点击事件处理

点击节点的时候显示节点信息,鼠标移开后不再显示;读者也可实现自定义处理逻辑

//创建节点
      const node = g.selectAll('.node')
        .data(data.nodes)
        .enter()
        .append('g')
        .attr('class', 'node')
        .style('fill', 'black')
        .on('click', // 鼠标点击事件处理函数
          function handleMouseOver(event,d) {
          d3.select(this).selectAll('.tooltip-text').remove(); // 移除旧的 tooltip 文本
            const tooltip = d3.select(this).append('text')
              .attr('class', 'tooltip-text')
              .attr('x', 0)
              .attr('y', -20) // 将 tooltip 放置在节点上方
              .text(`${d.name} (${d.type})`)
              .style('font-size', '12px')
              .style('fill', '#712')
              .style('text-anchor', 'middle');
          })
        .on('mouseout', // 鼠标离开事件处理函数
          function handleMouseOut(d) {
            d3.select(this).selectAll('.tooltip-text').remove(); // 清除 tooltip 文本
          });

实现效果如下

在这里插入图片描述

标签:事件处理,name,--,text,tooltip,d3,type,节点
From: https://blog.csdn.net/m0_54479027/article/details/140465011

相关文章

  • OpenCompass - 大模型评测
    文章目录一、关于OpenCompass概览组成评测对象工具架构能力维度设计思路通用能力学科综合能力知识能力推理能力理解能力语言能力安全能力评测方法客观评测主观评测(即将发布)特点路线图......
  • 白山云荣获信通院“算网安全行业应用优秀案例”奖
    日前,在由中国通信标准化协会算网融合产业及标准推进委员会与信通院共同组织召开的“2024年算网融合产业发展大会”上,白山云凭借创新的SD-WAN算网融合方案,荣获“算网安全行业应用优秀案例”奖。算网融合是多元异构、海量泛在的算力设施,通过网络连接形成一体化算网技术与服务......
  • UE MultiLineTraceByChannel函数返回只有一个对象的问题
    问题描述MultiLineTraceByChannel,看函数名字是返回射线检测到的所有对象,实际使用过程中,发现返回的数组中只又一个对象。MultiLineTracebyChannel可以看下官方的文档解释:此指南说明如何使用MultiLineTracebyChannel蓝图节点返回在Visilibity通道上响应的所有Acto......
  • 暴力风扇无刷方案
    方案名称:暴力风扇便携式涡轮扇采用高速无刷电机、螺旋压缩风道,释放风力可达普风扇的8—10倍。直流高速无刷电机具有安全、寿命长特点。使用18650三元锂电池供电,轻便、小巧便于携带。1、电池组:三元锂186502000mAH×27.4V电池上带有保护板、2Pin出线2、电机:直......
  • 数组005 二维数组
    1#include<iostream>2usingnamespacestd;34//二维数组作为函数的参数5//注意此时的长度,是有多少行,也就是最外层有多少个6voiderweishuzu(int(*p)[4],intlen)7{8for(inti=0;i<len;i++)9for(intii=0;ii<4;ii++)10......
  • Java中的泛型(很细)
    非常好,让我们深入探讨Java中的泛型这个重要主题。我将按照之前提供的框架,为您创作一篇全面而专业的技术博客文章。引言在Java编程世界中,泛型(Generics)是一个革命性的特性,它彻底改变了我们编写和组织代码的方式。自Java5引入以来,泛型已成为Java语言不可或缺的一部分,为开发者提供......
  • 祝贺小鹏汽车Gallardot同学成为Apache DolphinScheduler Committer!
    社区迎来新committer!这次是来自小鹏汽车的Gallardot,看看他与ApacheDolphinScheduler社区的故事吧。对话社区Q1:您为ApacheDolphinScheduler社区提交过哪些贡献(包括代码和非代码)?请具体描述您的贡献。A:我主要专注于提升ApacheDolphinScheduler在云原生Kubernetes支持和系......
  • zabbix“专家坐诊”第246期问答
    问题一Q:有哪位大哥知道这是啥情况,6.4主动检查接口显示未知?A:看看agent配置文件的主采集有没有填写正确IP。Q:我刚刚客户端重新授权,发现可以预警了,但是还是灰色的,我尝试输入错误的密码,可以预警,但是这个灰色有点奇怪,在6.0版本上没有这个问题,我现在部署了6.4的会有这个问题。A:不影......
  • GLM-4-9B-Chat WebDemo 部署报错:ValueError: too many values to unpack
    用开源大模型食用指南self-llm项目的GLM-4-9B-ChatWebDemo部署文档部署时遇到如下错误:ValueError:toomanyvaluestounpack(expected2)Traceback:File"/root/miniconda3/lib/python3.10/site-packages/streamlit/runtime/scriptrunner/script_runner.py",line552,......
  • go sync 与 direct
     来自:https://www.qiyacloud.cn/2021/04/2021-04-30/写的数据安全吗?思考一个问题:写数据做到什么程度才叫安全了?就是:用户发过来一个写IO请求,只要你给他回复了“写成功了”,那么无论机器发生掉电,还是重启等等之类的,数据都还能读出来。所以,在我们不考虑数据静默错误的前提下,......