导入
节点与链接简介
熟悉节点和链接这一非常重要的概念。
引言
在上一课探索了多种图表之后,我们来学习不同的可视化工具。
有些类型的数据很难通过传统图表来展示。例如,当我们需要表示不同城市之间的连接关系时,就需要使用节点和连线来呈现网络结构。
...
节点与连线
在上图中,节点代表城市,而连线用于连接这些城市。
网络布局
在绘制网络之前,先了解网络的基本概念。要绘制节点与连线构成的网络,我们需要知道每个节点的位置信息。正如我们在饼图中使用角度生成器为数据添加角度信息一样,绘制网络时也需要位置信息来确定节点和连线的坐标。D3.js 提供了 d3.forceSimulation() API 来为节点添加位置信息。该方法创建一个动态模拟过程,根据设定的约束条件,自动将节点以最优方式排列。
d3.forceSimulation() 使用力来控制视觉元素的位置。可以在元素之间设置各种力,例如:
- 所有元素相互排斥(
forceManyBody()) - 元素被吸引向重心(
forceCenter())
在下面的例子中,我们将借助 d3.forceSimulation() API 为数据添加位置信息。
No configuration found for ID: 0ae1083e59e7a88a4f31bc2b00f57ae4020deba5dde3fa7181974e9501f72903
说明
如上述代码所示:
- 第20行:我们将
graph中的nodes传入forceSimulation(),这会创建一个初始状态下没有力的模拟。 - 第21行:我们使用
d3.forceLink()创建一种力,基于节点之间的links关系。d3.forceLink()接收links数据作为输入,其中包含source和target节点。随后我们通过id映射到name字段,表明source和target是依据nodes中的name字段来指定的。 - 第23行 和 第24行:我们创建了两种力。
forceManyBody用于平衡forceLink的拉力,并使节点之间相互排斥;forceCenter则用于将节点保持在画布中心区域。 - 此时查看控制台输出的数据,可以看到每个节点的
x和y坐标,以及它们的vx和vy速度值,这些速度值用于计算作用力。
注意:为了正确绘制网络,必须在数据中明确指定
source和target。