我正在Holoviews中绘制网络,并根据节点的属性(时间戳)设置了节点的x位置。
给定这些x位置,如何获得最佳y位置?全息视图是否具有类似于simple_graph.nodes.array的自动方式?
这里的“最佳”是指视觉上吸引人,这可能很难定义。一种定义是连接的节点应更靠近在一起,并且边缘的交点应最小化。
下面是设置x位置的代码,其中y位置是根据均匀分布设置的:
import holoviews as hv
import numpy as np
import pandas as pd
import networkx as nx
N = 5
num_edges = 2
list1 = np.arange(N).tolist()*num_edges
list2 = np.array(list1)
np.random.shuffle(list2)
edgelist = pd.DataFrame({'vertex1': list1, 'vertex2': list2, 'weight': np.random.uniform(0, 1, len(list1))})
edgelist = edgelist[edgelist.vertex1 != edgelist.vertex2]
edgelist = edgelist.drop_duplicates()
times = pd.DataFrame({'vertex': np.arange(N), 'time': np.random.normal(0, 10, N)})
x = times.time
y = np.random.uniform(0, 1, N)
padding = dict(x=(np.min(x) - 1, np.max(x) + 1), y=(-1.2, 1.2))
node_indices = np.arange(N)
pos_graph = hv.Graph(((edgelist.vertex1, edgelist.vertex2), (x, y, node_indices))).redim.range(**padding)
pos_graph