【问题标题】:Can't display correct bipartite graph with networkx无法使用 networkx 显示正确的二分图
【发布时间】:2017-05-19 02:30:34
【问题描述】:

我正在尝试绘制一个二分图,左侧节点的颜色与右侧节点的颜色不同。我正在使用 networkx 和 matplotlib 这样做。 给定一个二分图 [(1, 3), (2, 5), (3, 4)],我希望显示 [1,2,3],一侧是蓝色,一侧是 [4,5] 水色另一侧,边缘 (1, 3), (2, 5), (3, 4) 介于两者之间。 以下是我的代码。

import networkx as nx
import matplotlib.pyplot as plt

def draw_bipartite(edges_list):
    left,right = set(),set()
    for s,t in edges_list:
        right.add(s)
        left.add(t)

    B = nx.Graph()
    B.add_nodes_from(list(right), bipartite=0)
    B.add_nodes_from(list(left), bipartite=1)
    B.add_edges_from(edges_list)

    nodecolor = []
    for node in B.nodes():
        a = 'blue' if node in list(right) else 'aqua'
        nodecolor.append(a)

    l,r = nx.bipartite.sets(B)
    pos = {}
    pos.update((node, (1, index)) for index, node in enumerate(l))
    pos.update((node, (2, index)) for index, node in enumerate(r))

    nx.draw(B, pos=pos,with_labels = True,node_color=nodecolor)
    plt.show()
draw_bipartite([(1, 3), (2, 5), (3, 4)])

在输出中,组 [1,2,3] 不保留在左侧,我如何将其保留在左侧以及蓝色?

【问题讨论】:

  • 请在“我的输出图”链接中找到我的代码输出
  • 顺便说一句,node in list(right) 效率很低。 node in right 好多了

标签: networkx bipartite


【解决方案1】:

更新 再次查看您的代码,我发现只有颜色取决于您所说的 leftright。职位是根据您所说的lr 确定的。您在处理 leftright 以及如何处理 lr 方面存在错误,因此我将分别解决这些问题。

让我们先看看颜色:当您定义leftright 时,概念上存在错误。

您将节点 3 放在左侧和右侧。您的边缘(1,3) 将 3 放在左侧,而 (3,4) 将其放在右侧。所以节点 3 最终的颜色是'blue',因为你已经把它放在了right 中。由于 4 没有放入 right,所以它最终是 'aqua'。请注意,令人困惑的是,元组左侧的内容以 right 结尾,您告诉它用蓝色为 right 着色,同时在您对错误的解释中说您想要 left你的情节是蓝色的。您应该使这一切保持一致,因为将来很难避免犯更多错误。

现在让我们看看节点位置:为什么[1,2,3] 没有在左边结束。您已经定义了 lr,而不是使用您之前定义的 leftright(我认为这不是一个好主意 - 只使用一个定义,否则您只是在做更难找到错误)。你用过l,r = nx.bipartite.sets(B) 这里有一些问题。首先,节点 2 和 5 可能在任一侧结束。这是一个任意选择,由 python 循环遍历字典中的键的不可预测的顺序决定。所以你很幸运2 最终出现在l。同样,节点1 很容易以r 结束。

期望3 最终与1 站在同一边是没有希望的——networkx 算法bipartite.sets 根据节点是否共享边来分离节点。由于边缘 (1,3) 在您的图表中,因此它们不会在同一侧结束。如果您使用了之前定义的leftright,那么1 将位于右侧,3 将位于左侧或右侧,具体取决于您的两个@ 的顺序987654357@ 命令,因为它在 leftright 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多