如何在Bokeh中添加边缘权重以绘制输出?

时间:2020-05-12 09:21:42

标签: python bokeh networkx

我想知道如何将边缘权重添加到我的Bokeh图中(来自NetworkX),最好是edge_renderer.hover_glyph,如下图所示:

enter image description here

1 个答案:

答案 0 :(得分:0)

此问题的可能答案是使用nx.get_edge_attributes并将值传递到draw_networkx_edge_labels作为边缘的标签。

这是期待已久的代码:

pos=nx.spring_layout(G) 
nx.draw_networkx(G, pos)
labels = nx.get_edge_attributes(G,'weight')
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)

这是一个完整的示例:

import networkx as nx
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4,4))
G = nx.Graph()
G.add_node('A', pos="1,3!", demand=-10)
G.add_node('B', pos="3,5!")
G.add_node('C', pos="3,1!")
G.add_node('D', pos="4,3!")
G.add_node('E', pos="5,5!")
G.add_node('F', pos="5,1!")
G.add_node('G', pos="7,3!", demand=10)

G.add_edge('A','B',weight=20,capacity=20,label='(20,20)')
G.add_edge('A','C',weight=7,capacity=15,label='(7,15)')
G.add_edge('B','E',weight=16,capacity=21,label='(16,21)')
G.add_edge('B','D',weight=4,capacity=4,label='(4,4)')
G.add_edge('C','F',weight=3,capacity=9,label='(3,9)')
G.add_edge('C','D',weight=4,capacity=4,label='(4,4)')
G.add_edge('D','E',weight=2,capacity=2,label='(2,2)')
G.add_edge('D','F',weight=6,capacity=10,label='(6,10)')
G.add_edge('E','G',weight=18,capacity=24,label='(18,24)')
G.add_edge('F','G',weight=9,capacity=10,label='(9,10)')

pos=nx.spring_layout(G) 
nx.draw_networkx(G, pos)
labels = nx.get_edge_attributes(G,'weight')
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)