forces(d3-force)

Force-directed graph layout using velocity Verlet integration.(v4)

  • d3.forceSimulation - 创建一个新的simulation.
    使用指定的节点数组创建一个新的simulation。如果没有指定节点,则默认为空数组。

  • simulation.restart - 重新启动模拟的内部计时器。
    该方法可用于在交互过程中对仿真进行“再加热”,如在拖拽节点时,或在与仿真暂停后恢复仿真。

  • simulation.stop - 停止模拟的计时器
    停止模拟的内部计时器,如果它正在运行,并返回模拟。如果计时器已经停止,则此方法不执行任何操作。该方法适用于人工运行仿真。

  • simulation.tick - 一个持续性刷新的function。
    手动按指定的迭代次数对模拟进行步骤,并返回模拟。如果没有指定迭代,则默认为1(单步)。

  • simulation.nodes - set the simulation’s nodes.
    如果节点nodes 被指定,设置布局的相关节点为指定的nodes 数组。如果未指定节点nodes ,则返回当前数组,默认为空数组。每个节点具有以下属性:

  • index - nodes 数组节点的索引(从零开始)。

  • x - 当前节点的x坐标位置。

  • y - 当前节点的位置y坐标。

  • vx -节点当前的x速度

  • vy -节点当前的y速度

  • fx -节点的固定x位置

  • fy -节点的固定y位置

  • simulation.alpha - 设置当前alpha值。
    如果指定了alpha,则将当前alpha设置为范围[0,1]中指定的数值,并返回此模拟。如果没有指定alpha,则返回当前alpha值,默认值为1。

  • simulation.alphaMin -设置最小alpha阈值。
    如果指定了min,则将最小alpha设置为范围[0,1]中指定的数字,并返回此模拟。如果没有指定最小值,则返回当前的最小alpha值,默认值为0.001。当当前alpha值小于最小alpha值时,模拟的内部计时器停止。默认alpha衰减率~0.0228,对应300次迭代。

  • simulation.alphaDecay - 设定指数衰减率。
    如果指定衰减,将衰减率设置为范围[0,1]中的指定数字,并返回此模拟。如果没有指定衰减,返回当前衰减率,默认值为0.0228…= 1 - pow(0.001, 1 / 300),其中0.001是默认的最小衰减率。
    衰减率决定了当前alpha向目标alpha内插的速度。较高的衰减率会使模拟更快地稳定下来,但有可能陷入局部最小值;数值越低,模拟运行的时间越长,但通常收敛于更好的布局。要使模拟永远以当前alpha值运行,请将衰减率设置为零;或者,设置一个大于最小值的目标。

  • simulation.alphaTarget - 设置目标的alpha。
    如果指定了目标,将当前目标alpha设置为范围[0,1]中的指定数字,并返回此模拟。如果未指定目标,则返回当前目标alpha值,默认值为0。

  • simulation.velocityDecay - 设置速度衰减率。
    如果指定衰减,则将速度衰减因子设置为[0,1]范围内的指定数值,并返回此模拟。如果未指定衰减,则返回当前速度衰减因子,默认值为0.4。

  • simulation.force - 添加或删除一个力。
    如果指定了力,则指定指定名称的力并返回此模拟。如果没有指定力,则返回未定义的力
    例如,要创建一个新的模拟图布局,如下

var simulation = d3.forceSimulation(nodes)
    .force("charge", d3.forceManyBody())
    .force("link", d3.forceLink(links))
    .force("center", d3.forceCenter());

若要删除具有给定名称的力,请传递null作为该力。例如,移除电荷力:

simulation.force("charge", null);
  • simulation.find(x, y[, radius]) - 找到离给定位置最近的节点。
    如果没有指定半径,则默认为无穷大。如果搜索区域内没有节点,则返回undefined。

  • simulation.on(typenames, [listener]) - 添加或删除事件侦听器。
    如果指定了侦听器,则设置指定typenames的事件侦听器并返回此模拟。如果事件侦听器已经注册了相同的类型和名称,则在添加新侦听器之前将删除现有侦听器。如果侦听器为null,则删除指定的typenames的当前事件侦听器(如果有的话)。如果未指定侦听器,则返回与指定的输入名匹配的第一个当前分配的侦听器(如果有)
    typenames是一个字符串,包含一个或多个由空格分隔的typename。

  • force - apply the force.

  • force.initialize(nodes) - 初始化力 。

  • d3.forceCenter[x, y] - 创建中心力。

  • center.x - 设置中心x坐标(默认为0)。

  • center.y - 设置中心y坐标(默认为0)。

  • d3.forceCollide[radius] - 创建一个圆的碰撞力。默认所有节点的常数1

  • collide.radius - 设置圆半径。默认为1

  • collide.strength - 设置碰撞分辨率强度。 默认为0.7

  • collide.iterations - 设置迭代次数。
    默认为1,增加迭代次数大大增加了约束的刚度,避免了节点的部分重叠,同时也增加了计算力的运行时成本。

  • d3.forceLink - 创建链接力。默认为空数组

  • link.links - 取得或者设置节点间的链接数组。
    每个链接都是一个具有以下属性的对象:

  • source - 链接的源节点

  • target - 链接的目标节点

  • index - the zero-based index into links, assigned by this method基于零的索引到链接,由这种方法分配

  • link.id - 通过数字索引或字符串标识符连接节点。
    如果指定了id,则将节点id访问器设置为指定的函数并返回此力。如果没有指定id,则默认为数值node.index:
    以下两种写法都可以:
var nodes = [
  {"id": "A"},
  {"id": "B"},
  {"id": "C"}
];

var links = [
  {"source": 0, "target": 1}, // A → B
  {"source": 1, "target": 2} // B → C
];
var nodes = [
  {"id": "A"},
  {"id": "B"},
  {"id": "C"}
];

var links = [
  {"source": "A", "target": "B"},
  {"source": "B", "target": "C"}
];
  • link.distance - 设置连接距离。默认为30

  • link.strength - 设置连接强度 。默认为:1 / Math.min(count(link.source), count(link.target));
    count(node)是一个函数,它返回作为源或目标的给定节点的链接数。之所以选择这个默认值,是因为它会自动降低连接到重连接节点的链接强度,从而提高稳定性。
    对每个链接调用强度访问器,传递链接及其从零开始的索引。然后,生成的数字存储在内部,这样,只有在初始化力或使用新的强度调用此方法时,才会重新计算每个链接的强度,而不是在力的每个应用程序上。

  • link.iterations - 设置迭代次数。默认值为1.
    增加迭代次数会大大增加约束的刚度,对网格等复杂结构很有用,但也会增加计算力的运行时成本。

  • d3.forceManyBody - 创建一个N体力

  • manyBody.strength - 设置力的强度。
    正值使节点相互吸引,类似于重力;负值使节点相互排斥,类似于静电荷。如果没有指定强度,则返回当前强度访问器,其默认值为:-30

  • manyBody.theta - set the Barnes–Hut approximation accuracy.
    若指定了 theta, 将其设定为Barnes–Hut近似的判定参数. 若 theta 未指定, 返回当前值, 默认为 0.9。

  • manyBody.distanceMin - 当节点接近限制力.默认值为1.
    最小距离为两个相邻节点之间的力的强度建立了上限,避免了不稳定性。特别是当两个节点完全重合时,避免了无穷大的力;在这种情况下,力的方向是随机的。

  • manyBody.distanceMax - 当节点远离限制力。默认为无限大。指定有限的最大距离可以提高性能,并产生更本地化的布局。

  • d3.forceX - 创建一个x方向的定位力。
    创建一个新的定位力沿着x轴指向给定的位置x。如果没有指定x,则默认为0。

  • x.strength - 设置力的强度。默认值为0.1.

  • x.x - 设置目标x坐标。默认值为0.

  • d3.forceY - 创建y方向的定位力。
    创建一个新的定位力沿y轴向给定的位置y。如果没有指定y,它默认为0。

  • y.strength - 设置力的强度。 默认值为0.1.

  • y.y - 设置目标y坐标。默认值为0.

    image

    image

  • d3.forceRadial - 创建径向定位力。创建一个新的定位向指定半径的一个圆的力量集中在⟨x, y⟩。如果x和y是未指定,默认⟨0,0⟩

  • radial.strength - 设置力的强度set the force strength.

  • radial.radius - 设置目标半径set the target radius.

  • radial.x - 设置目标中心x坐标set the target center x-coordinate.

  • radial.y - 设置目标中心y坐标set the target center y-coordinate.

d3.layout 布局 (v3)

力布局

  • d3.layout.force - 使用物理模拟排放链接节点的位置。

  • force.alpha - 取得或者设置力布局的冷却参数。
    获取或设置力布局的冷却参数:alpha。如果值value 已指定,设置alpha为指定的值并返回力布局。如果值大于零,这个方法也将重新启动力布局(如果它尚未运行),分发一个“启动”事件启用节拍定时器。如果值为非正,且力布局正在运行,这个方法将在下一个tick停止力布局并分派“结束”事件。如果未指定值,则该方法返回当前alpha值。

  • force.chargeDistance - 取得或者设置最大电荷距离。
    如果distance 被指定,设置电荷强度已经应用的最大距离。如果distance 未被指定,返回当前最大电荷距离,默认为无穷大。指定一个有限电荷距离提高力导向图的性能和产生更本地化的布局。限定距离的电荷力是尤其有用当合自定义重力一起使用时。有关示例, 请参阅“限定距离的电荷力(Constellations of Directors and their Stars)” (The New York Times).

  • force.charge - 取得或者设置电荷强度。
    如果指定电荷强度charge ,设置电荷强度为指定的值。如果电荷强度charge 未被指定,返回电流电荷强度,其默认值为-30。如果电荷强是常量,那么所有节点都具有相同的电荷。否则,如果电荷强度charge是一个函数,则该函数为每个节点(按顺序)求值,传递的参数是节点和它的索引,this上下文作为力布局;该函数的返回值被用于设置每个节点的电荷强度。每当布局开始(starts)时被调用。
    负值导致节点排斥,而正值导致节点吸引。对于图形布局,应使用负值;对于N体模拟(n-body simulation),可以使用正值。所有节点都假定为无穷远的小点具有相等电荷和质量。电荷力是通过Barnes–Hut算法(Barnes–Hut algorithm)高效实现的,为每个tick计算四叉树。电荷力设置为零禁用四叉树(quadtree),它可以显着提高性能,如果你不需要N体模拟。 Barnes–Hut算法:http://arborjs.org/docs/barnes-hut

  • force.drag - 给节点绑定拖动行为。
    绑定一个行为允许交互式拖动到节点,无论是使用鼠标或触摸。
    实现注意:在鼠标移动和鼠标弹起事件监听器已注册当前窗口上,这样,当用户开始拖动节点,他们可以继续拖动节点,即使鼠标离开窗口。每个事件监听器使用“force”命名空间,以避免和其他你可能想绑定到节点或窗体上的事件监听器冲突。如果节点被拖动事件移除了,随后的点击事件将被抓获到的最后一个鼠标抬起事件触发,你可以忽略这些点击和拖动通过查看是否默认的行为被阻止了。

selection.on("click", function(d) {
  if (d3.event.defaultPrevented) return; // ignore drag
  otherwiseDoAwesomeThing();
});
  • force.friction - 取得或者设置摩擦系数。
    如果指定了摩擦系数friction ,设定摩擦系数为指定的值。如果摩擦系数未被指定,返回当前系数,默认为0.9。

  • force.gravity - 取得或者设置重力强度。
    如果指定了重力gravity ,设置引力强度为指定的值。如果未指定重力,返回当前的引力强度,默认为0.1。

  • force.linkDistance - 取得或者设置链接距离。
    如果指定了distance ,设定链接节点间的目标距离为指定的值。如果未指定distance ,返回布局的当前链路距离,默认为20。

  • force.linkStrength - 取得或者设置链接强度。
    如果指定了strength ,设置链接间强度(刚性)为[0,1]范围内的指定的值。如果strength 未被指定,返回布局的当前链接强度,默认为1。

  • force.links - 取得或者设置节点间的链接数组。
    如果指定了链接links ,设置布局的相关链接为指定的links 数组。如果没有指定链接links 时,返回当前数组,默认为空数组。每个链接都有以下属性:

  • source - 源节点(节点中的元素)。

  • target - 目标节点(节点中的元素)。
    注意:在源和目标属性的值可初始化为nodes 数组的索引;这些将被替换为调用开始函数(start)之后的引用。链接对象可能有你指定的其他字段,这个数据可以用来计算链接强度strength和距离distance,基于每个连接的基础使用一个访问函数

  • force.nodes - 取得或者设置布局的节点数组。

  • force.on - 监听在计算布局位置时的更新。
    注册指定的监听器listener 为力布局指定类型的事件。目前,仅支持"start","tick"和"end"事件。"tick"事件将被指派为模拟的每个tick。当模拟内部的alpha冷却低于阈值(0.005)时,"end"事件就被调度并被设为零。

  • force.resume - 重新加热冷却参数,并重启模拟。
    相当于:
    force.alpha(.1);
    设置冷却参数alpha为0.1。

  • force.size - 取得或者设置布局大小。
    如果指定了size,设置可用的布局大小为指定的代表x和y的两元素数字数组来。如果未指定size,返回当前size,默认为[1, 1]。size影响力导向图的两个方面:重力中心和初始的随机位置。重心为[ x/2, y/2 ]。

  • force.start - 当节点变化时启动或者重启模拟。
    启动模拟;当首次创建布局时此方法必须被调用,然后分配节点和链接。此外,每当节点或链接发生变化它应当再次调用。

  • force.stop - 立即停止模拟。
    相当于:
    force.alpha(0);
    终止模拟,冷却参数alpha设定为零。这可以用来显式地停止模拟,例如,如果你要展示的动画或允许其他的互动。如果你没有明确停止布局,它仍然会自动在布局的冷却参数衰变后低于某个阈值后停止。

  • force.theta - 取得或者设置电荷作用的精度。
    若指定了 theta, 将其设定为Barnes–Hut近似的判定参数. 若 theta 未指定, 返回当前值, 默认为 0.8。

  • force.tick - 运行布局模拟的一步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • d3 (核心部分)选择集d3.select - 从当前文档中选择一系列元素。d3.selectAll - 从当前文...
    谢大见阅读 3,577评论 1 4
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,967评论 0 9
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,690评论 1 11
  • d3.forceSimulation([nodes]):創造一個新的simulation。這個模型包含著一個nod...
    陈定邦阅读 7,259评论 0 2
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,654评论 1 32

友情链接更多精彩内容