【问题标题】:Networkx: change the color of edges conditionallyNetworkx:有条件地改变边缘的颜色
【发布时间】:2018-08-12 23:55:44
【问题描述】:

假设我有一个 DiGraph DG,它代表一个最小生成树,如下所示。我想根据一个条件更改边缘的颜色。

cc = [('8k3aO-mPeyhbR5HUucA5aA', 'Hi10sGSZNxQH3NLyWSZ1oA'),
      ('8k3aO-mPeyhbR5HUucA5aA', 'bLbSNkLggFnqwNNzzq-Ijw'),
      ('8k3aO-mPeyhbR5HUucA5aA', 'nmdkHL2JKFx55T3nq5VziA'),
      ('8k3aO-mPeyhbR5HUucA5aA', '_BcWyKQL16ndpBdggh2kNA'), 
      ('8k3aO-mPeyhbR5HUucA5aA', 'CQUDh80m48xnzUkx-X5NAw'),
      ('8k3aO-mPeyhbR5HUucA5aA', 'wZPizeBxMAyOSl0M0zuCjg'),
      ('8k3aO-mPeyhbR5HUucA5aA', 'hWDybu_KvYLSdEFzGrniTw'),
      ('8k3aO-mPeyhbR5HUucA5aA', 'kS1MQHYwIfD0462PE61IBw'),
      ('8k3aO-mPeyhbR5HUucA5aA', 'HFECrzYDpgbS5EmTBtj2zQ'),
      ('RtGqdDBvvBCjcu5dUqwfzA', 'Xwnf20FKuikiHcSpcEbpKQ'),
      ('RtGqdDBvvBCjcu5dUqwfzA', 'bLbSNkLggFnqwNNzzq-Ijw'),
      ('RtGqdDBvvBCjcu5dUqwfzA', 'WG3w_73scm_JUWJ_3Lgn0Q'),
      ('P5bUL3Engv-2z6kKohB6qQ', 'Hi10sGSZNxQH3NLyWSZ1oA'),
      ('P5bUL3Engv-2z6kKohB6qQ', 'nzsv-p1O8gCfP3XijfQrIw'),
      ('P5bUL3Engv-2z6kKohB6qQ', 'm07sy7eLtOjVdZ8oN9JKag'),
      ('hWDybu_KvYLSdEFzGrniTw', 'U4INQZOPSUaj8hMjLlZ3KA'),
      ('8RcEwGrFIgkt9WQ35E6SnQ', 'wZPizeBxMAyOSl0M0zuCjg'),
      ('Xwnf20FKuikiHcSpcEbpKQ', 'CxDOIDnH8gp9KXzpBHJYXw'),
      ('HFECrzYDpgbS5EmTBtj2zQ', 'Xj0O2l0bp633ebmG468aZw'),
      ('XYSDrIef7g4Gmp3lNFVO6A', 'wZPizeBxMAyOSl0M0zuCjg'),
      ('wZPizeBxMAyOSl0M0zuCjg', 'syvwUKQJ4OYfmL_ixVLMeQ')]
      DG = nx.DiGraph()
      DG.add_edges_from(cc)
      pos = nx.spring_layout(DG)
      plt.figure(figsize=(20,20))
      nx.draw(DG, pos = pos,  arrows = False,
      node_color = 'black', width = 0.7, alpha = 0.9)

请注意,它是最小生成树的图。 我想将一个 2 度的节点与其后续节点之间的边缘涂成蓝色。 例如,('HFECrzYDpgbS5EmTBtj2zQ', 'Xj0O2l0bp633ebmG468aZw') 的边缘颜色应为蓝色。谁能帮帮我?

【问题讨论】:

  • 能发下源代码吗?
  • @BrandonWang 我已将问题编辑成一个更简单的场景,你能看一下吗?
  • 你需要在你的nx.draw函数中使用give edge_colorstackoverflow.com/questions/35510095/… 可能会有所帮助。或者这个stackoverflow.com/questions/34120957/…
  • @Tai 它比仅仅使用 'edge_color()' 有点多余,因为首先我需要选择一个 2 度的节点和它的后续节点之间的边。
  • 编辑了你的问题,希望有人能帮助你。

标签: python networkx


【解决方案1】:

您需要将颜色列表传递给nx.draw() 方法的edge_color 参数。现在,在给定 if-else 条件的情况下,创建列表的一种方法如下:

edge_colors = ['color1' if your_condition else 'color2' for e in G.edges]

这里,e 是一条边,在NetworkX v2.1 中,它只是一个元组(node1, node2)。您可以使用边本身或元组中的每个节点进行调节。

在您的具体情况下(如果我理解正确的话),应该是:

edge_colors = ['blue' if DG.degree[e[0]] == 2 else 'black' for e in DG.edges]

然后,您只需将其传递给edge_color 参数。在你的情况下:

nx.draw(DG, pos=pos,  arrows=False, edge_color=edge_colors, node_color='black', width=0.7, alpha=0.9)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2021-12-29
    • 2021-10-09
    • 2023-04-04
    相关资源
    最近更新 更多