You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NetworkX中为含inf值的边设置自定义颜色?

解决NetworkX中含inf参数边的颜色自定义问题

当然可行!你只需要把带inf参数的边和正常参数的边分开处理,分别设置颜色后再叠加绘制就行。我给你调整下你的代码片段,直接就能用:

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np

def plot_graph_colored_edges(G, node_positions, parameter):
    # 1. 拆分边为两组:含inf的边和正常参数的边
    inf_edges = []
    valid_edges = []
    valid_params = []
    # 假设parameter是一个以边元组(u,v)为键的字典,若为列表则调整取值逻辑
    for u, v in G.edges():
        param_val = parameter[(u, v)]
        if np.isinf(param_val):
            inf_edges.append((u, v))
        else:
            valid_edges.append((u, v))
            valid_params.append(param_val)
    
    # 2. 先绘制节点,避免被边覆盖
    nx.draw_networkx_nodes(G, node_positions, node_color='lightblue', node_size=500)
    nx.draw_networkx_labels(G, node_positions)
    
    # 3. 绘制正常参数的边,用颜色条映射颜色
    if valid_edges:
        edge_cmap = plt.cm.viridis  # 可替换成你需要的颜色条
        nx.draw_networkx_edges(G, node_positions, edgelist=valid_edges, 
                               edge_color=valid_params, edge_cmap=edge_cmap, 
                               width=2)
        # 可选:添加对应正常参数的颜色条
        sm = plt.cm.ScalarMappable(cmap=edge_cmap, norm=plt.Normalize(vmin=min(valid_params), vmax=max(valid_params)))
        sm.set_array([])
        plt.colorbar(sm, label='Parameter Value')
    
    # 4. 单独绘制含inf的边,指定为红色(可自定义样式)
    if inf_edges:
        nx.draw_networkx_edges(G, node_positions, edgelist=inf_edges, 
                               edge_color='red', width=2, style='dashed')  # 虚线更易区分
    
    plt.axis('off')
    plt.show()

关键细节说明:

  • 边的拆分逻辑:用np.isinf()判断参数是否为无穷大,将边分成两组。如果你的parameter是和G.edges()顺序对应的列表,只需把取值逻辑改成param_val = parameter[idx](配合enumerate遍历)即可。
  • 分层绘制顺序:先画节点,再画正常边,最后画inf边,确保红色边在最上层不会被遮挡。
  • 颜色条隔离:只有正常参数的边参与颜色条映射,避免inf干扰颜色范围的计算。
  • 样式自定义:给红色inf边加了虚线样式,你也可以改成实线、调整宽度或者换其他颜色(比如#FF4500橙红色)。

内容的提问来源于stack exchange,提问作者newtroks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:17:25