【问题标题】:Add nodes to a fixed backbone when drawing a networkx graph with graphviz, some of the larger nodes are ending up crammed together使用graphviz绘制networkx图时将节点添加到固定主干,一些较大的节点最终挤在一起
【发布时间】:2015-10-14 07:22:23
【问题描述】:

我使用 networkx 创建了一个图表。我正在使用 graphviz 绘制图表,特别是使用这些代码行:

pos = nx.graphviz_layout(G2, prog='neato', args='-Goverlap=prism')

plt.figure(figsize=(10, 14))

nx.draw(G2, pos, node_size=sizes, alpha=1, nodelist=nodes, node_color=colors, with_labels=True, labels=labelDict, font_size=8)

该图由几个较大节点的“主干”组成,数百个较小节点连接到这些节点。

我使用args='-Goverlap=prism'(在上面的第一行代码中)来分隔图形,但这产生了一个问题。将较大的节点隔开更重要,但是由于有很多小节点,一些较大的节点最终会挤在一起。

我对解决方案的想法是生成一个仅包含较大节点的图,以确保它们的间距适当,然后将较小的节点添加到此图中,而不更改原始节点的布局。我做了一些研究,在 graphviz 中添加新节点而不更改旧节点似乎有些棘手。可以“固定”节点,但我不确定如何在 networkx 中执行此操作。

这是图表当前的样子:

【问题讨论】:

    标签: graph graphviz networkx


    【解决方案1】:

    你的想法似乎很合理。以下代码生成一个图,为节点 1 和 2 分配初始位置,然后使用nx.spring_layout 为所有节点分配位置。我允许节点 2 移动,但节点 1 保持固定。

    import networkx as nx
    G=nx.path_graph(6)
    originalpos = {1:(0,0), 2:(1,0)}
    newpos = nx.spring_layout(G, pos=originalpos, fixed=[1])
    newpos
    > {0: array([-0.39442754, -0.35733777]),
     1: array([ 0.,  0.]),
     2: array([ 0.44050048,  0.3734393 ]),
     3: array([ 0.8658906 ,  0.80306291]),
     4: array([ 1.21367619,  1.27878715]),
     5: array([ 1.45676553,  1.72154196])}
    

    对于您的情况,您将获得主干的位置,然后将这些节点用作您的固定列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 2019-03-29
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多