d3 重置范围后保留比例/平移

2023-11-25

我有一个<svg>其宽度为其容器的 100%。当容器调整大小时,我更新线性xScale.range()代表新调整大小的宽度<svg>。显然,然后我需要将范围重新应用到我的缩放行为,如中所述Zoom.x() 文档:

如果以编程方式修改比例的域或范围,则应再次调用此函数。设置 x 比例还会将比例重置为 1,并将平移重置为 [0, 0]。

的重置scale and translate这是我遇到问题的地方。如果我之前在调整大小之前放大过,我会调用zoom.x( xScale )现在 d3 认为图表的比例为 1,平移为 0,0,因此,我无法缩小或平移。

我处理调整大小的方法是否不正确?


看起来最好的策略是缓存比例并转换值,重置,然后重新应用。作为记录,此代码(在我的调整大小处理程序中)大致显示了我的解决方案:

// Cache scale
var cacheScale = zoom.scale();

// Cache translate
var cacheTranslate = zoom.translate();

// Cache translate values as percentages/ratio of the full width
var cacheTranslatePerc = zoom.translate().map( function( v, i, a )
{
  return (v * -1) / getFullWidth();
} );

// Manually reset the zoom
zoom.scale( 1 ).translate( [0, 0] );

// Update range values based on resized container dimensions
xScale.range( [0, myResizedContainerWidth] );

// Apply the updated xScale to the zoom
zoom.x( xScale );

// Revert the scale back to our cached value
zoom.scale( cacheScale );

// Overwrite the x value of cacheTranslate based on our cached percentage
cacheTranslate[0] = -(getFullWidth() * cacheTranslatePerc[0]);

// Finally apply the updated translate
zoom.translate( cacheTranslate );


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

d3 重置范围后保留比例/平移 的相关文章

  • 使用不同颜色的 dc.js 显示原始(有条件)拉丝未拉丝交叉过滤器条

    假设我们有以下 crossfilter dc js 应用程序 虽然这很好 但用户在刷牙时会失去对人群的 参考 我想要图表x y z and a在刷其他图表时保留 基础 柱 也许是不同的颜色 如下所示 我相信这可能需要更新dc renderA
  • 当节点扩展时增加d3中的连接链路长度

    我正在 d3 中研究可折叠力布局 我面临的问题是 当单击节点时 我需要增加节点之间链接的长度 以保持子节点之间的链接距离相同 当分析扩展时 如何增加分析和耀斑之间的距离 保持与子级的距离较小 是的 您可以通过定义一个函数来做到这一点力 链接
  • d3.forcesimulation() 链接距离

    我在堆栈上查看了不同的链接距离 似乎为了改变链接距离 您需要实现一个函数 然后传递它来动态分配链接距离 如下所示 function linkDistance d return d distance 然后我认为我可以传递给 svg 但返回函数
  • 矩形相当于文本的文本锚点表示属性吗?

    是否有一个与文本的文本锚点表示属性等效的矩形 我希望能够从左侧 右侧或根据情况定位矩形 我知道这可以通过一些简单的计算来完成 但我只是想知道是否已经存在内置的东西 文本锚点演示属性上的链接 https developer mozilla o
  • 使用 d3 在两个节点之间绘制多条边

    我一直在关注 Mike Bostock 的代码这个例子 http bl ocks org 1153292学习如何在 d3 中绘制有向图 并且想知道如何构建代码 以便可以在图中的两个节点之间添加多个边 例如 如果上例中的数据集定义为 var
  • 我可以补间 D3 弧的结束角度,但不能补间起始角度。我究竟做错了什么?

    我只是在玩这个演示并自己重新创建它 http bl ocks org mbostock 5100636 http bl ocks org mbostock 5100636 我可以定义一个新的 endAngle 并且它会很好地制作动画 但现在
  • d3.js 中拖动后(有时)单击事件未触发

    观察到的行为 我正在使用 d3 js 并且我想根据以下情况更新一些数据drag https github com mbostock d3 wiki Drag Behavior wiki on事件 并重绘事件之后的所有内容dragend ht
  • 如何使用数据对象中的值指定 d3.js 选择器?

    我在 Web 应用程序中使用 d3 js 描述我想要做的事情的最简单方法是查看下面链接的 Fiddle 但基本设置是我有一个包含数据对象的数组 my data id B text I want this text in B id C tex
  • 暂停和恢复过渡

    我在用setInterval 因此转换会在一定时间间隔后发生 是否可以使用 setInterval 暂停和恢复工作 任何正确方向的建议 指示都会非常有帮助 这个问题是在 D3 v3 是最新版本时发布的 5年后D3 v5有了一些新方法 比如s
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • D3.js分组条形图

    I am making a bar chart using D3 js like this source statcan gc ca http www statcan gc ca pub 12 593 x 2007001 figures f
  • D3 向对象添加超链接?

    我正在尝试制作 D3 图 它将代表我网站的菜单 我尝试按照此处的其他指南添加超链接 但它们都不起作用 每个对象都会有一个不同的 URL 指向 主页 关于 联系方式等 如果添加超链接 我可以拖动对象吗 这意味着如果我按住单击 如果我单击该对象
  • 使用 CSS Grid,从任何地方滚动 div(不使用 jQuery 插件)

    div 怎样才能 scroll content https jsfiddle net blehmanade x1k3rhj7 33 可以从页面上的任何位置滚动吗 现在 scroll content仅当鼠标位于其上方时才可滚动 但是 当鼠标位
  • GeoJson 世界数据库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 需要使用 d3 js 显示国家和城市的地图 实际上 D3支持GeoJson格式 通常
  • 如何根据形状字段值将两个不同的形状添加到 D3 力向图?

    我是D3的新手 我正在使用力定向图 我想在节点的位置添加两种不同类型的形状 我的 json 如下 nodes name 00 00 00 00 00 00 00 01 group 0 shape 1 name 00 00 00 00 00
  • 在 Crossfilter 中使用过滤器

    我刚刚开始使用 crossfilter 和 d3 js 我正在尝试 API 参考中给出的一些片段 我有以下数据 var payments crossfilter date 2011 11 14T16 17 54Z quantity 2 to
  • 避免在 ES6 的函数内定位 this 的对象作用域

    例如 我正在使用 D3 js 运行一个项目 导入特定模块并调用它们的函数 Setup TypeScript ES6 导入特定的 D3 组件 角6 我有一个对象 在本例中是一个角度指令 并在 SVG 画布上绘制一些圆圈 并希望它们在拖动事件上
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1
  • D3 围绕一组圆圈绘制船体

    我想用 d3 围绕分组力定向图构建绘制一个船体 我已经用圆圈构建了图表 但我现在想将圆的交点与路径 船体 连接起来 如果不连接交叉点 画一个围绕这组圆的船体就足够了 我尝试过具有凸包的力导向布局 http bl ocks org 29205

随机推荐

  • 如何对 IList 进行排序?

    没有Sort 函数为IList 有人可以帮我弄这个吗 我想对我自己的列表进行排序 假设这是我的 IList public class MyObject public int number get set public string mark
  • BeautifulSoup - 获取无 HTML 内容的简单方法

    我使用此代码来查找页面中所有有趣的链接 soup findAll a href re compile notizia php idn d 它的工作做得很好 不幸的是里面atag 有很多嵌套标签 例如font b和不同的东西 我想只获取文本内
  • 像结构成员一样访问 C++14 lambda 捕获

    AFAIK C 11 14 不允许在定义 lambda 时就地定义新的返回类型 然而 C 14 lambda 捕获表达式似乎本质上创建了一个带有一个或多个 成员 和一个运算符 的匿名类型 那么 为什么编译器不允许访问捕获的成员outside
  • T-SQL 根据输入参数的值使用不同的 WHERE 子句

    我想改变WHERE基于输入参数值的查询子句 我猜这是可能的 但似乎我正在以错误的方式接近它 我的 SP 查询的简化版本 CREATE PROCEDURE dbo GetMailboxMessagesByStatus UserId UNIQU
  • 使用外部 js 库在 Amazon Lambda 中将 XML 解析为 JSON

    我正在尝试将从服务器获取的 XML 字符串转换为 Lambda 函数内的 JSON 我设置了这个相当简单的示例来模拟使用 DynamoDB 从服务器获取的 XML 答案 目前我只是想继续进行转换 use strict var AWS req
  • 如何使用 C 在 Linux 上以编程方式终止进程树

    我正在尝试编写一个函数来生成一个子进程 让它运行一段时间 然后在它尚未完成时杀死它 int sysExecTimeout const char exePath int timeoutSec 在函数中 我使用fork and execl生成孩
  • 获取当前请求URL的scheme

    在 Ruby Rack 中 我能够获取当前请求 URL 的方案scheme request 然而 在围棋中 http Request URL Scheme返回一个空字符串 package main import fmt log net ht
  • 为什么 Ansible 显示“错误!任务中未检测到任何操作”错误?

    Ansible 显示错误 错误 任务中未检测到任何操作 这通常表示模块名称拼写错误或模块路径不正确 怎么了 准确的文字记录是 ERROR no action detected in task This often indicates a m
  • 如何使 findpeak 函数检测负峰值而不是正峰值

    我想知道我该怎么做findpeak函数检测负峰而不是正峰 它检测下图所示的红色峰 我需要检测蓝色峰 有什么想法吗 非常感谢 如前所述 你必须使用 data 这是一个例子 x 0 1e 3 5 pi t 0 length x 1 1e 3 y
  • 支持多界面,但主屏幕只有单一界面,在 iOS8 + iPhone 中不工作

    我有如下所示的视图结构 HomeView Support only portrait mode V View1 Support all orientation V View2 Support all orientation 问题 当我com
  • 首先使用代码在实体框架中建模关系问题

    我试图首先在实体框架中学习代码 但在建模关系时遇到问题 它是一个基本的人力资源数据库 因此有两个实体 员工和部门 员工属于一个部门 该部门有一名团队管理员和一名经理 他们实际上都是员工 我尝试使用以下方法对此进行建模 EMPLOYEE pu
  • BackgroundWorker & Timer,只读取日志文件的新行?

    我的应用程序写入一个日志文件 当前使用log4net 我想设置一个计时器和一个后台工作人员来读取日志文件并将其内容打印到我的表单中的某些控件中 同时写入日志文件 我无法使用文件系统观察者类因为似乎被破坏了 有时事件 改变 会触发 有时则不会
  • 删除 CR 行终止符

    首先我想说我已经读过这个帖子但是我仍然有问题CR line terminators 有一个文件叫build test sh 我编辑于leafpad它可以直接显示在Vim cp moonbox llvm 2 9 lib Transforms
  • 如何在B类中定义A类,在A类中定义B类?

    我有两种类型 一种类型 A 一种类型 B 问题类型 A 包含类型 B 类型 B 包含类型 A 这样的事情是行不通的 type typeA record test1 typeB end type typeB record test2 type
  • 使用哪款 Android 手机进行开发...? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我计划将一些游戏从 iPh
  • 免费的 UML 工具,非常适合 .NET [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 谁能推荐一款您曾经使用过并
  • 错误:TypeError:$(...).dialog 不是函数

    我在获取对话框作为基本功能时遇到问题 这是我的 jQuery 源导入 Html
  • 如何使用硬件视频缩放器?

    现代显卡具有硬件视频缩放器 例如作为 AMD Avivo NVIDIA PureVideo 或 Intel ClearVideo 的一部分 例如 AMD 的Avivo 白皮书 says 图像输出缩放器支持最多 6 个垂直滤波器抽头及以上 至
  • 基于区域设置的python csv列表分隔符

    如何使用Python检测用户机器中的列表分隔符 需要在用户计算机上创建 CSV 文件 并且必须自动检测列表分隔符 以便 Excel 可以读取 CSV 文件 我发现 Excel 从 区域选项 gt 数字 gt 列表分隔符 中获取 CSV 元素
  • d3 重置范围后保留比例/平移

    我有一个