【问题标题】:Networkx spread nodes and shorten lablesNetworkx 传播节点和短标签
【发布时间】:2018-10-25 06:45:55
【问题描述】:

我有一个网络二分图。 这是代码:

    G = nx.Graph()
    G.add_nodes_from(USsNames, bipartite=0) # Add the node attribute "bipartite"
    G.add_nodes_from(TCsNames, bipartite=1)
    G.add_weighted_edges_from(compoundArr)

    labeldict = {}


    # Separate by group
    pos = {}

    # Update position for node from each group
    pos.update({node: [1, index] for index, node in enumerate(USsNames)})
    pos.update({node: [2, index] for index, node in enumerate(TCsNames)})

    nx.draw(G, pos, node_size=10,with_labels=False)
    for p in pos:  # raise text positions
        pos[p][1] += 0.12

    # create the dictionary with the formatted labels
    edge_labels = {i[0:2]:'{0:.2f}'.format(i[2]['weight']) for i in G.edges(data=True)}

    # add the custom egde labels
    nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels,font_size=8)
    nx.draw_networkx_labels(G, pos,font_size=8)
    plt.show()

然后输出:

我需要扩展左侧节点以便它们向上扩展,并缩短右侧节点标签(比如说前四个字符)。

我试图找到解决方案,但没有成功。谢谢。

【问题讨论】:

    标签: python python-3.x networkx graph-theory


    【解决方案1】:

    我根据生成的示例数据重构了您的案例。

    首先我们有这个图表。

    左数组的大小远小于右数组的大小,所以左数组是不按比例绘制的。要正确绘制它,您应该修改您的位置更新函数:

    pos.update({node: [1, index] for index, node in enumerate(USsNames)})

    我们知道TCsNames 大于USsNames,因此我们可以将每个USsNames 节点的Y 位置与其比率相乘:

    pos.update({node: [1, index*(len(TCsNames)/len(USsNames))] for index, node in enumerate(USsNames)})

    现在我们有了这个图表:

    要裁剪节点标签,您应该使用labels 参数修改draw_networkx_labels

    nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=8)

    node_labels 等于:

    node_labels = {i: i[:5] for i in G.nodes}(5 是所需的节点标签长度)。

    最后我们得到了你需要的图表:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-02
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2019-05-06
      相关资源
      最近更新 更多