使用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
相关产品推荐
相关产品推荐

