新闻中心
J*aScript数据可视化_D3.js力导向图实现
首先引入D3库并定义包含nodes和links的数据结构,接着创建SVG容器并初始化力模拟,设置边、电荷和中心力;然后绘制连线、节点及标签,最后通过监听tick事件更新元素位置,并添加拖拽交互以实现动态调整。

力导向图(Force-directed Graph)是数据可视化中常见的一种形式,特别适合展示节点之间的关系网络。D3.js 作为强大的 J*aScript 可视化库,提供了完整的物理引擎支持,可以轻松实现力导向图。下面介绍如何使用 D3.js 创建一个基础但功能完整的力导向图。
准备环境与数据结构
要使用 D3.js 实现力导向图,首先引入 D3 库。可以通过 CDN 引入最新版本:
力导向图的数据通常包含两个数组:nodes(节点)和 links(边)。例如:
const graph = {
nodes: [
{ id: "A" },
{ id: "B" },
{ id: "C" }
],
links: [
{ source: "A", target: "B" },
{ source: "B", target: "C" }
]
};
每个节点有唯一 id,每条边指定 source 和 target 节点。
创建 SVG 容器与力模拟
使用 SVG 绘制图形,并初始化 D3 的力模拟(force simulation):
const width = 800;
const height = 600;
const svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height);
const simulation = d3.forceSimulation(graph.nodes)
.force("link", d3.forceLink(graph.links).id(d => d.id).distance(100))
.force("charge", d3.forceManyBody().strength(-300))
.force("center", d3.forceCenter(width / 2, height / 2));
说明:
- forceLink:定义边的连接关系,distance 控制边长
- forceManyBody:提供节点间的斥力(负 strength 表示排斥)
- forceCenter:将整个图居中于画布中心
绘制节点与连线
在 SVG 中添加线段表示边,圆形表示节点:
ChatCut
AI视频剪辑工具
1086
查看详情
const link = svg.append("g")
.selectAll("line")
.data(graph.links)
.enter()
.append("line")
.attr("stroke", "#999")
.attr("stroke-width", 1);
const node = svg.append("g")
.selectAll("circle")
.data(graph.nodes)
.enter()
.append("circle")
.attr("r", 8)
.attr("fill", "#4285f4")
.call(d3.drag()
.on("start", dragstarted)
.on("drag", dragged)
.on("end", dragended)
);
同时为节点添加标签(可选):
const label = svg.append("g")
.selectAll("text")
.data(graph.nodes)
.enter()
.append("text")
.text(d => d.id)
.attr("font-size", 12)
.attr("dx", 12)
.attr("dy", 4);
绑定力模拟与更新位置
监听模拟的 tick 事件,在每次迭代后更新节点、边和标签的位置:
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);
label
.attr("x", d => d.x)
.attr("y", d => d.y);
});
拖拽函数用于交互式调整节点位置:
function dragstarted(event, d) {
if (!event.active) simulation.alphaTarget(0.3).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(event, d) {
d.fx = event.x;
d.fy = event.y;
}
function dragended(event, d) {
if (!event.active) simulation.alphaTarget(0);
d.fx = null;
d.fy = null;
}
通过设置 d.fx 和 d.fy,可以在拖动时固定节点位置,提升交互体验。
基本上就这些。只要数据结构清晰,D3 力导向图就能自动布局并支持交互。可根据需要添加颜色映射、提示框、缩放等功能进一步增强可视化效果。
以上就是J*aScript数据可视化_D3.js力导向图实现的详细内容,更多请关注其它相关文章!
# 它很
# 新增网站推广名称怎么填
# 造句搞笑关键词排名软件
# 营销软件推广烟酒
# 稻草熊seo
# 如何推广营销网站
# 山东优化网站推广
# 遂宁网站推广电话
# 私活seo优化
# 泉州网站优化报价
# 佛山抖音营销推广平台
# 可以通过
# 相关文章
# 就能
# javascript
# 拖拽
# 管理器
# 有何
# 如何使用
# 有什么
# 数据结构
# 数据可视化
# cdn
# app
# svg
# node
# js
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
微信聊天记录怎么加密_微信聊天记录加密方法
J*aScript中针对特定容器内图片动画的实现教程
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分
CSS自定义字体样式被系统字体替换怎么办_font-face方式指定font-display控制渲染策略
J*aScript中localStorage数据的获取、清洗与格式化教程
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
c++中的std::launder有什么实际用途_c++对象生命周期与指针优化
AO3最新镜像入口 Archive of Our Own官方平台访问
不同用户不同价格! 索尼开启账户个性化定价测试
mysql备份恢复性能优化_mysql备份恢复性能优化方法
痛风发作了怎么办? 快速止痛和后期饮食调理
蛙漫2台版漫画地址 Manwa2正版网页版链接
小红书网页版入口链接分享 小红书官网直接进
邮政快递包裹最新位置 邮政快递实时追踪入口
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
在J*a中如何隐藏复杂性_使用门面模式组织对象交互
CSS Box Model与弹性按钮:维持布局稳定的动画实践
mc.js官网登录入口 mc.js官方登录入口最新版
AO3最新官网入口公告_2025AO3镜像站实时查询方法
我的世界官方游戏入口 我的世界官网平台直达链接
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问
千牛数据看板网页版_千牛数据看板网页版访问方法
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
Python Socket多播通信中指定源IP地址的实践指南
Lar*el DB::listen 事件中的查询执行时间单位解析
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
在命令行怎么运行html项目_命令行运行html项目方法【教程】
谷歌google账号怎么注册账号 谷歌账号注册官方流程
Lar*el Form Request中唯一性验证在更新操作中的正确实现
必由学官方登录入口 必由学教师学生账号快速访问
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
从OpenAI API响应中高效提取生成文本
《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
顺丰国际快递查询 国际件官方查询入口
限制HTML日期输入框的日期选择范围
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
J*aScript类型检查_j*ascript代码规范
虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画
ACG动漫视频网入口 ACG动漫*免费正版观看地址


2025-11-18
浏览次数:次
返回列表
.attr("dx", 12)
.attr("dy", 4);