如何在NetworkX绘制的图中设置垂直显示的边权重标签?
让NetworkX边标签垂直显示的解决方案
嘿,我明白你想把有向图里的边权重标签改成垂直显示的需求啦!其实只需要在绘制边标签的时候调整几个参数就能搞定,下面结合你的代码给你具体的实现方法:
首先先把你没写完的代码补全(假设剩下的边也是类似的权重设置),然后关键是用nx.draw_networkx_edge_labels()函数时,设置**rotation=90**参数来让标签垂直旋转,同时可以调整标签位置避免重叠。
修改后的完整代码
import networkx as nx import matplotlib.pyplot as plt # 创建有向图 G = nx.DiGraph() # 添加节点及位置 G.add_node('A', pos=(0, 100)) G.add_node('B', pos=(2, 50)) G.add_node('C', pos=(-2, 50)) G.add_node('D', pos=(0, 40)) G.add_node('E', pos=(1, 10)) G.add_node('F', pos=(-1, 10)) G.add_node('G', pos=(0, -50)) # 添加边及权重 G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'D'), ('C', 'D'), ('D', 'E'), ('D', 'F'), ('E', 'G'), ('F', 'G')], weight=1) # 获取节点位置 pos = nx.get_node_attributes(G, 'pos') # 绘制节点和边 nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=800, font_size=12) # 绘制垂直显示的边权重标签 edge_labels = nx.get_edge_attributes(G, 'weight') nx.draw_networkx_edge_labels( G, pos, edge_labels=edge_labels, rotation=90, # 核心参数:让标签旋转90度,垂直显示 label_pos=0.3, # 调整标签在边上的位置(0是起点,1是终点) font_size=10, font_color='red' # 可选:设置标签颜色,更醒目 ) plt.show()
关键参数解释
rotation=90:这是让标签垂直显示的核心,把标签旋转90度变成纵向排列。如果你想让标签倒过来显示,可以设为270。label_pos:控制标签在边的哪个位置显示,0对应起点,1对应终点,0.5是中间。根据你的图结构调整这个值,能避免标签和节点、边重叠。font_size/font_color:可选参数,用来调整标签的大小和颜色,提升可读性。
这样运行代码后,所有边的权重标签就会垂直显示啦!
内容的提问来源于stack exchange,提问作者Fazeleh
相关产品推荐
相关产品推荐

