是否可以在 networkx 图中混合不同形状的节点?

Is it possible to mix different shaped nodes in a networkx graph?

我有一个包含两种不同类型节点的 XML 文件(我们称它为节点 'a' 和节点 'b')。他们是相连的。我想将节点 'a' 呈现为 - 让我们说一个正方形,将节点 'b' 呈现为一个圆圈。这在 networkx 和 Python 中可能吗?

我的原计划是声明两个图表:

AG=nx.DiGraph()
BG=nx.DiGraph()

然后根据节点的类型向每个节点添加节点 - 所以我将遍历 XML,如果节点是 'type a',则将其添加到 AG,如果是 B 型,则将其添加到 BG

现在我可以显示每个图形并定义其形状 - 通常:

nx.draw_networkx(EG, font_family="Arial", font_size=10,
                 node_size=2000, node_shape="s", node_color='r', labels=node_labels, with_labels=True)

它失败的部分是当我尝试在 'a' 节点和 'b' 节点之间添加边时。

关于这可能如何运作的任何想法?

将整个数据集保存在一个图表中:

G = nx.DiGraph()

同时保留 A_nodes 和 B_nodes 的列表。然后你可以使用

select G 的子图
AG = G.subgraph(A_nodes)
BG = G.subgraph(B_nodes)

由于所有节点都在 G 中,您现在可以在 A 节点和 B 节点之间添加边:

G.add_edge(a_node, b_node)