定制可视化

创建后,可以以各种方式修改 VisualizationGraph 对象,以调整下次渲染时可视化的外观。在本节中,我们将讨论如何为节点着色、调整节点大小和固定节点,以及如何直接修改现有 VisualizationGraph 对象的节点和关系。

如果您尚未创建 VisualizationGraph 对象,请参阅以下部分之一

为节点着色

节点可以直接通过在创建时为其提供一个颜色字段来着色。例如,可以通过将颜色作为字符串传递给 Node 对象的 color 参数来完成。

或者,在创建 VisualizationGraph 对象后,您可以根据节点的字段或属性为节点着色。

`color_nodes` 方法

通过调用 neo4j_viz.VisualizationGraph.color_nodes() 方法,您可以根据节点字段或属性(Node.properties 映射的成员)为节点着色。

可以根据离散或连续颜色空间为节点着色(参阅 ColorSpace)。在离散情况下,为节点字段/属性的每个唯一值分配提供的 colors 中的新颜色。在连续情况下,colors 应是表示范围的颜色列表,用于根据节点字段/属性的值创建颜色渐变。

默认情况下,将使用 Neo4j 调色板,该调色板适用于浅色和深色模式。如果您想使用不同的调色板,可以将字典或颜色的可迭代对象作为 colors 参数传递。颜色值可以是字符串(如“blue”)、十六进制颜色代码(如“#FF0000”),甚至是 RGB 值的元组(如 (255, 0, 255))。

如果某些节点已设置了 color,您可以使用 override 参数选择是否覆盖它。

按离散颜色空间着色

为了不使用默认颜色,我们可以根据离散节点字段“caption”为 color_nodes 方法提供自定义颜色列表

from neo4j_viz.colors import ColorSpace

# VG is a VisualizationGraph object
VG.color_nodes(
    field="caption",
    ["red", "#7fffd4", (255, 255, 255, 0.5), "hsl(270, 60%, 70%)"],
    color_space=ColorSpace.DISCRETE
)

允许的颜色值的完整集合列于此处

除了定义自己的颜色,您还可以例如使用 palettable 库中的调色板,如下所示

from palettable.wesanderson import Moonrise1_5

# VG is a VisualizationGraph object
VG.color_nodes(field="caption", Moonrise1_5.colors)  # PropertyType.DISCRETE is default

在这些情况下,所有具有相同标题的节点将获得相同的颜色。

如果颜色数量少于提供的节点 fieldproperty 的唯一值数量,则颜色将循环重复使用。为避免这种情况,您可以使用更大的调色板或添加额外颜色进行扩展。有关如何实现后者的示例,请参阅可视化 Neo4j 图数据科学 (GDS) 图教程

按连续颜色空间着色

为了不使用默认颜色,我们可以为 color_nodes 方法提供表示范围的自定义颜色列表

from neo4j_viz.colors import PropertyType

# VG is a VisualizationGraph object
VG.color_nodes(
    property="centrality_score",
    [(255, 0, 0), (191, 64, 0), (128, 128, 0), (64, 191, 0), (0, 255, 0)]  # From red to green
    color_space=ColorSpace.CONTINUOUS
)

在这种情况下,将根据“centrality_score”属性的值为节点着色,最低值将着红色,最高值将着绿色。由于我们在范围内仅提供了五种颜色,因此渐变的粒度将限制为五个步骤。

palettablematplotlib 是创建自定义颜色渐变的优秀库。

调整节点大小

节点可以直接通过在创建时为其提供一个大小字段来指定大小。例如,可以通过将整数大小传递给 Node 对象的 size 参数来完成。

或者,在创建 VisualizationGraph 对象后,您可以调整节点大小。

`resize_nodes` 方法

通过调用 neo4j_viz.VisualizationGraph.resize_nodes() 方法,您可以通过以下方式调整节点大小

  • 将新节点大小作为字典 sizes 传递,将节点 ID 映射到像素大小,或

  • 提供一个包含两个数字的元组 node_radius_min_max:节点将缩放到的最小和最大半径(大小,以像素为单位)。

或者,您可以同时提供 sizesnode_radius_min_max,在这种情况下,将首先使用字典设置节点的大小,然后将随后使用元组的最小值和最大值将大小缩放到提供的范围。

如果您仅提供 node_radius_min_max 参数,节点的尺寸将被缩放,使得最小的节点具有第一个值的大小,最大的节点具有第二个值的大小。其他节点将根据其相对大小在这两个值之间线性缩放。这对于节点尺寸变化很大,或者都非常小或非常大的情况很有用。

在以下示例中,我们将 ID 为 42 的节点的大小调整为 88 像素,然后将所有节点的大小缩放至 5 到 20 像素之间

# VG is a VisualizationGraph object
VG.resize_nodes(sizes={42: 88}, node_radius_min_max=(5, 20))

请注意,这意味着 ID 为 42 的节点也将缩放至 5 到 20 像素的大小。

固定节点

节点可以固定在其在可视化中的当前位置,这样它们就不会被力导向布局算法移动。这对于希望将节点保持在特定位置(例如,突出显示它)很有用。

节点可以直接在创建时固定。例如,可以通过将 pinned=True 传递给 Node 对象来完成。

或者,在创建 VisualizationGraph 对象后,您可以切换节点的固定状态。

`toggle_nodes_pinned` 方法

通过调用 neo4j_viz.VisualizationGraph.toggle_nodes_pinned() 方法,您可以切换节点是否应被固定。此方法接受一个字典,将节点 ID 映射到布尔值,其中 True 表示节点被固定,False 表示节点未被固定。

在以下示例中,我们固定 ID 为 1337 的节点,并取消固定 ID 为 42 的节点

# VG is a VisualizationGraph object
VG.toggle_nodes_pinned(1337: True, 42: False)})

直接修改节点和关系

还可以通过访问现有 VisualizationGraph 对象的 nodesrelationships 字段来直接修改节点和关系。这些属性分别列出了图中的所有 NodesRelationships

每个节点和关系都具有可以直接访问和修改的属性,如下例所示

# VG is a VisualizationGraph object
VG.nodes[0].size = 10
VG.nodes[0].properties["height"] = 170
VG.relationships[4].caption = "BUYS"

对节点和关系所做的任何更改都将反映在图的下次渲染中。

© . All rights reserved.