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

使用networkx和Tkinter绘图时draw_networkx_nodes参数错误求助

问题解决说明

核心报错原因

  • nx.draw_networkx_nodes() 是仅用于绘制节点外观(大小、颜色、形状等)的专用函数,本身不包含标签绘制能力,没有with_labels这个入参,传入非法参数就会触发你遇到的类型错误。节点标签的绘制由独立的nx.draw_networkx_labels()函数负责,你后续已经调用了这个函数,不需要在绘制节点时额外加标签参数。
  • 补充注意:你第605行的nx.draw_networkx_edges()调用也存在参数误用问题,edge_labels是nx.draw_networkx_edge_labels()的专属参数,不能传给仅用于绘制边样式的nx.draw_networkx_edges(),否则也会触发同类报错。

修正后的代码

将plot_actual函数中对应的错误参数删除即可:

def plot_actual():
    pos=nx.get_node_attributes(G,'pos')
    fig, ax = plt.subplots(figsize=(40, 30),dpi=100)
    # 移除with_labels参数
    nx.draw_networkx_nodes(G, pos, ax=ax) # LINE 601
    labels = nx.get_edge_attributes(G,'weight')
    nx.draw_networkx_labels(G,pos)
    nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)
    # 移除edge_labels参数
    nx.draw_networkx_edges(G, pos) # LINE 605
    ax.tick_params(left=True, bottom=True, labelleft=True, labelbottom=True)
    path=('ActualGraph.png')
    plt.savefig(path)
    img = PImage.open(path)
    img.show()
    return

可选简化写法

如果你不需要单独自定义节点、边的样式,也可以直接调用支持with_labels参数的一站式绘图函数nx.draw(),可以大幅简化代码:

def plot_actual():
    pos=nx.get_node_attributes(G,'pos')
    fig, ax = plt.subplots(figsize=(40, 30),dpi=100)
    # 一站式绘制节点、边、节点标签
    nx.draw(G, pos, with_labels=True, ax=ax)
    # 仅单独绘制边权重标签即可
    labels = nx.get_edge_attributes(G,'weight')
    nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)
    ax.tick_params(left=True, bottom=True, labelleft=True, labelbottom=True)
    path=('ActualGraph.png')
    plt.savefig(path)
    img = PImage.open(path)
    img.show()
    return

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:24:01