javascript - 将力树约束到不规则边界 d3
问题描述
我将圆圈(节点)放在等值线图上。我推导出每个状态特征的质心,并将其用作圆 x 和 y 坐标。状态特征通过 json 文件加载。然后我调用一个 d3 力模拟,将它们很好地聚集在每个状态的中心周围。这对大多数州都很有效,直到您到达佛罗里达或加利福尼亚这样又长又细的地方,并且节点出现在州边界之外。是否可以将力模拟约束在不规则形状的状态边界内?可能使用 d3.polygon 来测试该点是否仍在商店内。但我不知道怎么做。我的代码目前如下所示:
parent.selectAll('circle')
.data(d => d.votes)
.enter()
.call(sim)
.append('circle')
.attr('id', d => d.id + d.name)
.attr('cx', d => d.x)
.attr('cy', d => d.y)
.attr('r', circleSize)
} // eslint-disable-line
function sim(dots) {
const data = dots.data()
const simulation = d3.forceSimulation(data)
.force("x", d3.forceX(function (d) { return d.x }))
.force("y", d3.forceY(function (d) { return d.y }))
.force("collide", d3.forceCollide(d => (circleSize * 1.3)))
for (var i = 0; i < 600; ++i) simulation.tick()
}
佛罗里达看起来像这样:
解决方案
推荐阅读
- sql - SQL Server BCP Utility 数据导入不正确
- css - Ngx-datatable 在悬停时显示图标
- sas - 将 SAS Enterprise 库导入 SAS University
- reactjs - 我如何正确返回地图功能
- angular - 角度资产上传文件夹缓存?
- python - 尝试发送电子邮件时出现python AttributeError
- node.js - 如何在 nuxt 中实现 Steam 身份验证
- go - 通过引用传递接收器结构
- r - 根据另一个数据框中的列在一个数据框中应用正则表达式
- ios - iOS Swift,如何区分使用 Apple Watch 和 iPhone 的步骤?