有没有办法放大 D3 力布局图?

2023-12-11

D3 具有力导向布局here。有没有办法给这个图添加缩放功能?目前,我能够捕获鼠标滚轮事件,但不太确定如何编写重绘函数本身。有什么建议么?

var vis = d3.select("#graph")
  .append("svg:svg")
  .call(d3.behavior.zoom().on("zoom", redraw)) // <-- redraw function
  .attr("width", w)
  .attr("height", h);

2014 年 6 月 4 日更新

也可以看看迈克博斯托克的答案在这里D3 v.3 中的更改和相关例子。我认为这可能会取代下面的答案。

更新 2/18/2014

我认为如果您希望整个 SVG 进行平移和缩放,@ahaarnos 的答案更可取。嵌套的g只有在同一个 SVG 中有非缩放元素时(不是原始问题中的情况),我下面的答案中的元素才是真正必要的。如果你do将行为应用到g元素,然后是背景rect或类似的元素需要确保g接收指针事件。

原答案

我得到这个工作基于缩放-平移-变换示例 - 你可以在这里看到我的 jsFiddle:http://jsfiddle.net/nrabinowitz/QMKm3/

这比我希望的要复杂一点——你必须嵌套几个g要使其正常工作,请设置 SVG 的pointer-events归因于all,然后附加一个背景矩形来接收指针事件(否则仅当指针位于节点或链接上方时才有效)。这redraw功能比较简单,就是在最里面设置一个transformg:

var vis = d3.select("#chart")
  .append("svg:svg")
    .attr("width", w)
    .attr("height", h)
    .attr("pointer-events", "all")
  .append('svg:g')
    .call(d3.behavior.zoom().on("zoom", redraw))
  .append('svg:g');

vis.append('svg:rect')
    .attr('width', w)
    .attr('height', h)
    .attr('fill', 'white');

function redraw() {
  console.log("here", d3.event.translate, d3.event.scale);
  vis.attr("transform",
      "translate(" + d3.event.translate + ")"
      + " scale(" + d3.event.scale + ")");
}

这有效地缩放了整个 SVG,因此它也缩放了笔划宽度,就像放大图像一样。

还有另一种example这说明了类似的技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法放大 D3 力布局图? 的相关文章

  • Google 文档 - 以编程方式将鼠标点击发送到大纲窗格中的项目

    在 Google 文档中 您可以打开大纲窗格并查看文档中的所有标题 您也可以单击标题 视图将滚动到标题 我的问题是如何使用 Chrome 扩展中的 JS 以编程方式模拟鼠标单击 以将视图滚动到所需的标题 我尝试了以下代码 但没有任何反应 u
  • 使用什么事件来在选择文本框中的值时显示警报消息

    我正在使用 jquery 的自动完成 api 来从数据库中获取名称 但是我想在从显示的文本框中选择名称时显示一条警报消息 我将显示一个图像以便更好地理解 当我输入 S 时 它将显示所有包含 S 的记录 所以问题是 如果我选择例如 Spars
  • JavaScript:参数列表后缺少 )

    这个 JavaScript 产生一个错误 参数列表后缺少 在 firebug 中使用代码 我究竟做错了什么 功能d缺少左括号 answer after 不应该逃避 只需常规报价即可
  • 动态检测屏幕高度和屏幕宽度,以精简图像的高度和宽度

    我以前可以display a div标签仅在portrait使用下面提到的代码corrl https stackoverflow com users 15388872 corrl in this https stackoverflow co
  • 使用 jQuery 的 javascript 关联数组长度

    我正在使用 javascript 关联数组 例如 var testarray testarray one 1 testarray two 2 testarray three 3 我也在旁边使用jquery 如何使用 jquery 或任何其他
  • 无法读取setInterval(Hooks)中的最新状态变量[重复]

    这个问题在这里已经有答案了 我想这是因为 JS 的工作原理 但我想你不会在类中遇到这个问题 在此代码中 let open setOpen React useState false let counter setCounter React u
  • 如何使用javascript隐藏div

    我想使用 Javascript 隐藏一个 div 下面是我的div div class ui dialog titlebar ui widget header ui corner all ui helper clearfix span cl
  • Hydrate with RTK Query 确实会抛出错误

    我有一个非常简单的组件来显示来自本地 API 的数据 使用 Nextjs API 路由制作 我使用 RTK 查询来获取数据 const api createApi reducerPath data baseQuery fetchBaseQu
  • 将 ESLint 与 Airbnb 样式和选项卡结合使用 (React.js)

    我正在开发一个 React js 应用程序 并且正在尝试检查我的代码 我将 ESLint 与 Airbnb 风格一起使用 但出现以下错误 src Test jsx 4 2 error Unexpected tab character no
  • 测量填写部分的时间 - 谷歌表单

    我正在尝试使用谷歌表单进行研究调查问卷 对于某些部分 我想自动测量用户填写所需的时间 谷歌表单中没有这样的选项 我尝试复制表单源 并用 javascript 填充时间 但它不起作用 跨源问题 未能成功托管复制的表单 如何做到 我如何衡量回答
  • 您网站上的自定义 jQuery 脚本有多少行代码?多少才算是太多呢?

    对于我们的网站 我使用了大量 jQuery 现在我正在查看基础库顶部的 340 行 jQuery 代码 多少是太多了 我将添加更多内容 我什么时候开始尝试压缩代码并最终转向 OOP 行数并不意味着什么 重要的是你实际上在做什么 您可能拥有
  • 使用jquery和coldfusion cffile上传多个文件

    不是一个真正的问题 只是想将其发布在某个地方 因为我在其他地方找不到它 现在我已经拼凑了一个工作演示 我想我会分享 这在 Coldfusion 和 Railo CFML 服务器上同样有 效 问题是 对于 CFML 开发人员来说 CFFILE
  • 两个日期之间间隔 15 分钟 javascript

    问题 我需要将两个日期 时间戳之间的所有 15 分钟时隙 日期格式 2016 08 10 16 00 00 创建为 HH mm 格式的数组 其中分钟限制为 00 15 30 45 示例 中午 12 30 到下午 2 30 将 gt 12 3
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 如何使用 jQuery 在 ASP.NET MVC 3 中设置会话变量?

    所以这就是问题 如何使用 jQuery 在 ASP NET MVC 3 中设置 Session 变量 我正在尝试使用 ajax or post但问题是我真的不知道该怎么办 描述 只需发布到控制器并在那里设置会话变量即可 Sample jQu
  • 如何在 jQueryUI 工具提示中换行

    新版本的 jQueryUI 1 9 附带了本机工具提示小部件 经过测试 如果内容 标题属性的值 很短 它就可以正常工作 但如果内容很长 工具提示一旦显示就会与输入文本重叠 有a demo http jqueryui com tooltip
  • 右列固定的 Div 表

    我最近接手了一个非营利网站作为一个项目 我正在使用一个现有的网站 所以我必须使用很多已经编程的东西 所以我所要做的就是创建设计 I made a diagram of basically what I can t figure out ho
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter
  • 开玩笑 setTimeout 不暂停测试

    it has working hooks async gt setTimeout gt console log Why don t I run expect true toBe true 15000 我已经查看了这个答案 Jest 文档和几

随机推荐

  • 使用来自多个表的信息来记录交付的通用或特定 DAO?

    我正在创建一个 Web 应用程序 让用户使用 spring 和 hibernate 通过 GUI 存储和检索数据库中的信息 在创建 DAO 和服务层时我陷入了困境 我想创建一个可以添加新交付的方法 在我的交货表中我有产品编号 and 客户I
  • Prolific PL2303 串行端口至 250000bps

    我需要使用 c 以 250kbps 的速度运行我的 dev ttyUSB0 多产的 pl2303 USB RS232 转换器 我到处查看 每个人都说最接近的可达到的速度是 230400 bps http lxr linux no linux
  • 通用量化和统一,一个例子

    给出运行 monad 的以下签名ST runST forall s ST s a gt a 和功能 newVar a gt ST s MutVar s a readVar MutVar s a gt ST s a 那么Haskell编译器将
  • Facebook API for Android:如何获取有关用户好友的扩展信息?

    我正在开发小型 Android 应用程序 试图添加 Facebook 支持 主要问题 我只能获取有关用户朋友的基本信息 ID 姓名 应用程序权限列表 offline access仅用于测试 很快就会被删除 String sPermissio
  • 我如何使用 ruby​​ 迭代这个 json 文档?

    我有一个ruby代码块 如下 require elasticsearch require json search term big data city Hong Kong client Elasticsearch Client new lo
  • 使用 Maven 集成 Activiti Modeler

    如何将 Activiti Modeler 集成到自己的 Web 应用程序中并保留 Maven 建议的所有优点 问题是Maven中的Activiti Modeler是Activiti Explorer的一部分 网上有一些问题来自那些想要开发自
  • 如何在 Array.map 中获得正确的“this”?

    我假设有一些应用call or apply在这里 但我不确定如何实现它 http codepen io anon pen oXmmzo a foo bar things 1 2 3 showFooForEach function this
  • 如何在图中找到精确长度的路径

    我想在无向图中找到固定长度的路径 运行程序时给出 我正在使用我的图的邻接矩阵 我尝试使用一些算法 如 DFS 或 A 但它们只返回最短路径 节点无法再次访问 假设我的图有 9 个节点 最短路径是由 4 个节点构建的 我想要有额外的变量来 告
  • 使用Python从word文档中提取图像

    如何使用 python 从 Word 文档中提取图像 徽标并将其存储在文件夹中 以下代码将 docx 转换为 html 但不会从 html 中提取图像 任何指示 建议都会有很大帮助 profile path
  • 如何在创建广告帐户 Facebook 营销 api 时为 aduser 提供管理员访问权限

    我正在尝试使用以下代码通过 Facebook 营销和图形 API 在 Facebook 业务管理器中创建广告帐户 attachment array access token gt this gt accessToken name gt as
  • Seaborn 子图上的 GridSpec

    我目前有 2 个使用 seaborn 的子图 import matplotlib pyplot as plt import seaborn apionly as sns f ax1 ax2 plt subplots 2 sharex Tru
  • 使用 Visual AutoLayout 在 NSScrollView 中布局多个视图

    我需要显示内部垂直对齐的多个视图NSScrollView 我首先添加NSTableView and NSButton 我将它们垂直对齐NSTableView在顶部和NSButton在底部 我添加了NSTableview and NSButt
  • 使用以西班牙语显示日期名称的日期时间值设置 x 轴格式

    我有一系列关于天气的数据 在这种情况下 只有 14 天的温度 Plotly 可以很好地自动管理日期 但我无法更改日期的语言并设置 python 区域设置locale setlocale locale LC TIME es ES 不影响 Pl
  • 两个日期计算字段之间的值的 SQL SUM

    我有这个查询 它返回 null SELECT SUM sales as MAT from TABLE2 where Date1 between CONVERT VARCHAR 23 DATEADD MONTH 11 Date1 111 an
  • 比较本地文件与远程文件

    我有以下问题 我有一个本地 zip文件和一个 zip文件位于服务器上 我需要检查是否 zip服务器上的文件与本地的不一样 如果不是 我需要从服务器中提取新的 我的问题是如何在不从服务器下载文件并在本地比较它们的情况下比较它们 我可以在创建时
  • py2app 中的错误

    我正在一个简单的 test py 应用程序上测试 py2app 没有做任何特别的事情 python 3 6 py2app 0 14 当我发出以下命令时 它构建得很好 没有错误 python3 6 setup py py2app A 但当我启
  • 如何在列表框中实现保持?

    如果按住列表框 我想获取列表框索引 这是我的代码
  • 通过手动链接打开多个 Fancybox 画廊

    我尝试转换中提供的解决方案如何通过手动调用 html 中的画廊而不是通过 jquery 选项来打开 fancybox 为了将其应用到多个画廊 但无法使其正常运行 我拥有的是几个具有以下属性的链接 a href class open albu
  • 如何在react-native中使用FormData?

    你好 刚学会使用 js 和 React Native 我无法使用 FormData 它总是显示不受支持的 bodyinit 类型 我想发送文本而不是 JSON stringify 谁能帮我 谢谢 var data new FormData
  • 有没有办法放大 D3 力布局图?

    D3 具有力导向布局here 有没有办法给这个图添加缩放功能 目前 我能够捕获鼠标滚轮事件 但不太确定如何编写重绘函数本身 有什么建议么 var vis d3 select graph append svg svg call d3 beha