我有一个包含3列的数据框:f1,f2和得分。我想绘制一个图形(使用NetworkX)以显示节点(在f1和f2中)和边值作为“得分”。我能够绘制带有节点及其名称的图。但是,我无法显示边缘得分。有人可以帮忙吗?
这是我到目前为止所拥有的:
Processed
答案 0 :(得分:1)
您正确地尝试使用nx.draw_networkx_edge_labels
。但是它使用labels
作为edge_labels
,并且您没有在任何地方指定它。您应该创建此字典:
labels = {e: G.edges[e]['score'] for e in G.edges}
取消注释nx.draw_networkx_edge_labels
功能:
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
feature_1 = ['Boston', 'Boston', 'Chicago', 'ATX', 'NYC']
feature_2 = ['LA', 'SFO', 'LA', 'ATX', 'NJ']
score = ['1.00', '0.83', '0.34', '0.98', '0.89']
df = pd.DataFrame({'f1': feature_1, 'f2': feature_2, 'score': score})
print(df)
G = nx.from_pandas_edgelist(df=df, source='f1', target='f2', edge_attr='score')
pos = nx.spring_layout(G, k=10) # For better example looking
nx.draw(G, pos, with_labels=True)
labels = {e: G.edges[e]['score'] for e in G.edges}
nx.draw_networkx_edge_labels(G, pos, edge_labels=labels)
plt.show()
结果将如下所示:
P.S。您在nx.from_pandas_edgelist
中也有不正确的源/目标。您应该具有:
source='f1', target='f2'
代替:
source='feature_1', target='feature_2'