【问题标题】:Change edge thickness based on weight根据重量更改边缘厚度
【发布时间】:2020-01-06 11:45:47
【问题描述】:

当使用networkx的draw_networkx_edges()时,是否可以根据它们的重量来改变边缘的粗细?

这里我假设权重小于某个已知数字,例如 k。

【问题讨论】:

    标签: python matplotlib networkx


    【解决方案1】:

    你可以使用edges(data='weight'):

    边以元组的形式返回,并按顺序(节点、邻居、数据)包含可选数据。

    也就是说,你可以在指定data='weight'时通过edge[2]获取一条边的数据(或者如果调用data=True来获取所有数据元素作为字典,则可以通过edge[2]['weight']获取)。

    这是一个例子:

    import networkx as nx
    g = nx.Graph()
    g.add_edge('A', 'B', weight=5)
    g.add_edge('A', 'C', weight=15)
    g.add_edge('B', 'C', weight=7)
    
    pos = nx.spring_layout(g, seed=0)
    nx.draw_networkx(g, pos)
    
    for edge in g.edges(data='weight'):
        nx.draw_networkx_edges(g, pos, edgelist=[edge], width=edge[2])
    

    【讨论】:

      【解决方案2】:

      一种方法是对边缘进行分类,如this example 所示。

      第 1 步:为边添加权重
      第 2 步:根据权重对边缘列表进行分类
      第 3 步:将 edgelist 传递给 draw_networkx_edges

      我是从different SO thread 偶然发现的。

      旧链接:http://networkx.lanl.gov/examples/drawing/weighted_graph.html

      【讨论】:

      • 示例链接已损坏
      猜你喜欢
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      相关资源
      最近更新 更多