gpt4 book ai didi

python - igraph:绘制同一图的递增增长子图时如何固定节点位置

转载 作者:行者123 更新时间:2023-11-28 22:40:38 31 4
gpt4 key购买 nike

我有一个图表,我之前通过在 Gephi 中运行 ForceAtlas2 预先计算了节点的位置,然后我尝试在 python 中使用 ìgraph 进行绘制。每个节点都有一个 date 属性,因此我遍历所有年份,计算相应的子图并绘制它们以创建动画效果。

然而,随着节点不断添加到图中,先前的节点不一定保持其旧位置,类似于描述的 in this post

我的代码如下:

colors = [color_list[int(g.vs[v]["Modularity Class"])] for v in range(0, len(g.vs))]
label_sizes = [sz / 4.0 for sz in g.vs["size"]]

nodes_in_years = defaultdict(list) # keeps a list of nodes per year
for v in g.vs:
year = int(v["date"][:4]) # convert the first 4 digits of the date to year
nodes_in_years[year].append(v)

nodes_incremental = []
for y, nodes in nodes_in_years.items():
nodes_incremental += nodes
h = g.subgraph(nodes_incremental)

plot(h, "graph-igraph%d.png"%y,
bbox=(640,480),
vertex_color=colors,
vertex_label_size=label_sizes,
keep_aspect_ratio=False,
)

以下是两个连续的快照。 graph 2001 graph 2002

在第二个快照中,随着更多节点被添加到左侧,节点被稍微“挤压”。

如何将节点保持在固定位置?我尝试使用 xlim 设置和 ylim 但我可能没有正确设置值

最佳答案

xlimylim 是针对igraph的R接口(interface);它们在 Python 中无效。通常使用的技巧是在所有快照中找到最小和最大 X 和 Y 坐标,然后将两个假顶点(它们的 shape 属性设置为 None)放在布局的左上角和右下角。确保在具有相同坐标的所有快照中包含这些假顶点 - 这将确保布局在每个快照中以完全相同的方式缩放以适合您指定的边界框。

如果您没有在当前布局中使用 shape 属性,请注意,将 shape 属性添加到假顶点也会添加 shape 属性(默认值为 None)设置为“真实”顶点,因此您应该手动将除两个假顶点之外的所有顶点的 shape 属性设置为 “圆圈”

关于python - igraph:绘制同一图的递增增长子图时如何固定节点位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354804/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com