【问题标题】:Bipartite graph problems二分图问题
【发布时间】:2021-02-12 19:43:09
【问题描述】:

这是我的代码...我不知道为什么剧情会这样显示

import networkx as nx
import matplotlib.pyplot as plt
import random
from networkx.algorithms import bipartite
B = nx.Graph()
B.add_nodes_from([1, 2, 3, 4], bipartite=0)
B.add_nodes_from(["a", "b", "c"], bipartite=1)
B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a")])
nx.draw_networkx(B)
plt.show(B)

为什么结果看起来不对?为什么不单独显示 2 组

如果我想画这张图……我该怎么办?如何使用二分布局,谁能帮我写这段代码

【问题讨论】:

  • 鉴于昨天有人问了一个非常相关的问题:*.com/questions/66158192/… 我假设这是一个家庭作业问题。所以我会给出指导,但不会给出答案。你从来没有告诉networkx 它应该以显示图形二分性质的方式绘制图形。所以它只是正常地绘制它。查看`networkx`的二分布局功能,了解如何做你想做的事。
  • @Joel 非常感谢您的指导

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


【解决方案1】:

试试这个:

import networkx as nx
import matplotlib.pyplot as plt
import random
from networkx.algorithms import bipartite
B = nx.Graph()
n = [1, 2, 3, 4]
l = [*'abc']
B.add_nodes_from(n, bipartite=0)
B.add_nodes_from(l, bipartite=1)
B.add_edges_from([(1, "a"), (1, "b"), (2, "b"), (2, "c"), (3, "c"), (4, "a")])
pos = dict()
pos.update( (n, (1, i)) for i, n in enumerate(n) ) 
pos.update( (n, (2, i)) for i, n in enumerate(l) ) 

nx.draw_networkx(B, pos=pos)
nx.draw_networkx_nodes(B, pos=pos, nodelist=n, node_color='G')
nx.draw_networkx_nodes(B,  node_shape='s', pos=pos, nodelist=l, node_color='r')

nx.draw_networkx_labels(B, pos, font_color='white',
                        labels={i:i for i in l})

plt.axis('off')
plt.show(B)

输出:

【讨论】:

  • @ahmad 这个解决方案对您有帮助吗?
  • 非常感谢@Scott Boston,我的朋友……它对我真的很有帮助,只是我还有另一个问题,如果我想将节点增加到 200 个节点(n=100 和 l = 100) 并且随机有 280 条边......如何制作这个网络?你能帮我吗?再次感谢您的关注
  • 非常感谢我的朋友...这对我真的很有帮助,只是我还有一个问题,如果我想将节点增加到 200 个节点(n=100 和 l =100)并且也有 280 个随机边...如何制作这个网络?你能帮我吗?再次感谢您的关注
  • 这个问题不够具体。需要更多关注。