python - Networkx 图和标签
问题描述
我在理解 networkx 库的工作原理和节点标签方面遇到了一些麻烦。假设我在熊猫数据框中有一个相关矩阵:
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'])
我现在想绘制这个相关矩阵的简单图形表示(在这个例子中是一个三角形),然后为更大的相关矩阵/距离矩阵生成最小生成树。
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)
推荐阅读
- php - 我如何才能在 Laravel 中获得关系的支点?
- visual-studio-code - 如何禁用vscode中的默认调整线?
- laravel - 我需要在services.php 中添加逗号吗?
- node.js - 未捕获的异常:SyntaxError:意外令牌:标识符:尝试以管理员身份登录 mongo shell 时
- java - spring security login 总是重定向到失败的url
- python - Scrapy:项目返回 JSON 值作为列表,尝试将列表的每个元素输出为自己的行
- apache-kafka - Kafka 消费者 API 上的 Kafka Streams DSL
- java - 如何在春季检查预先创建的对象
- javascript - 使用 koa-body 未定义 POST 请求正文
- javascript - 检查 Cookie 是否存在,如果是则执行任何操作,如果没有则设置 cookie