【问题标题】:Networkx Graph plot node weightsNetworkx Graph 绘图节点权重
【发布时间】:2019-10-11 04:17:34
【问题描述】:

我想为无向图中的每个节点分配节点权重。我使用以下 MWE:

import sys
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(0)
G.add_node(1, weight=2)
G.add_node(2, weight=3)
nx.draw(G, with_labels=True)
plt.show()

然后我有一个如下形式的图:

我想在节点旁边绘制一个以新颜色给出的权重的图表,例如:

实现这一点的最简单方法是什么?在 SO 上,材料主要用于边缘权重,或者改变节点大小 w.r.t。节点权重。

【问题讨论】:

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


    【解决方案1】:

    您可以将labels 属性与相应的dict 和node_color 属性与相应的列表一起使用。对于此代码:

    G = nx.Graph()
    G.add_node(0, weight=8)
    G.add_node(1, weight=5)
    G.add_node(2, weight=3)
    labels = {n: G.nodes[n]['weight'] for n in G.nodes}
    colors = [G.nodes[n]['weight'] for n in G.nodes]
    nx.draw(G, with_labels=True, labels=labels, node_color=colors)
    

    Networkx 将抽奖:

    如果你想同时绘制节点 ID 和它的权重,你可以这样写:

    labels = {n: str(n) + '; ' + str(G.nodes[n]['weight']) for n in G.nodes}


    如果您在节点中缺少weight 属性并想要绘制它们,您可以使用此代码:

    labels = {
        n: str(n) + '\nweight=' + str(G.nodes[n]['weight']) if 'weight' in G.nodes[n] else str(n)
        for n in G.nodes
    }
    

    我认为用不同颜色绘制接近节点的权重几乎是不可能的。这是我能给你最好的建议。

    【讨论】:

    • 您好,感谢您的回复!但是,我不想更改颜色,只在原始节点索引旁边添加权重。您的最后一行 labels = {n: str(n) + '; ' + str(G.nodes[n]['weight']) for n in G.nodes} 在我的代码中不起作用。有什么方法可以生成我想要的吗?
    • 您应该为每个节点设置weight 属性,这样代码才能正常工作。
    • 至少它有效,但我希望有一个更精确的方法:)
    • 更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多