Networkx 图和标签

Networkx graph and labels

我在理解 networkx 库的工作原理和节点标签时遇到了一些问题。假设我在 pandas 数据框中有一个相关矩阵:

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

D = pd.DataFrame\
({'A': [1, 0.5, 0.1], 'B': [0.5, 1, 0.3], 'C': [0.1, 0.3, 1]}, index =  ['A', 'B', 'C'])

我现在想绘制此相关矩阵的简单图形表示(在本例中为三角形),然后为更大的相关 matrices/distance 矩阵生成最小生成树。

corr_graph = nx.from_pandas_adjacency(D)
pos = nx.spring_layout(corr_graph)
nx.draw_networkx_nodes(corr_graph ,pos=pos, label = ['A', 'B', 'C'])
nx.draw_networkx_edges(corr_graph ,pos=pos)
nx.draw_networkx_edge_labels(corr_graph , pos=pos)
plt.axis('off')
plt.show()

这样就生成了图形,每条边上都有正确的标签。在节点上,我有自循环边 {'weight':1},但节点本身没有标签,我希望将它们设置为 A、B 和 C,就像在我的初始数据框中一样,这样我就可以识别它们。我的另一个问题是如何去除自环边缘标签。

我想对最小生成树做同样的事情,但首先我只是想在简单图上做。

谢谢,

绘图节点标签

(内置函数):

nx.draw_networkx_labels(corr_graph, pos=pos)

删除自循环:

方法一:

将对角线设置为零,然后创建图形:

# for example
E = D - np.eye(D.shape[0])
corr_graph = nx.from_pandas_adjacency(E)

方法二:

创建图形,并且只绘制源和目标不同的边。

corr_graph = nx.from_pandas_adjacency(D)
edges = [(a,b) for (a,b) in corr_graph.edges() if a != b]
nx.draw_networkx_edges(corr_graph, edgelist=edges, pos=pos)