在节点外部标记 networkx 节点属性

2024-02-04

我正在研究属于两种类型的小示例节点集{'human', 'machine'}我想在每个节点之外以字典形式标记节点属性networkx图中,如下图的节点c、e、j所示。 (我使用MS Word在图表上添加了字典类型的属性。):

基本图是使用以下代码生成的:

import networkx as nx
G = nx.Graph()
G.add_nodes_from(['a', 'b', 'c', 'd', 'e', 'f', 'g'], type = 'machine')
G.add_nodes_from(['h', 'i', 'j'], type = 'human')
G.add_edges_from([('a', 'c'), ('a', 'b'), ('a', 'd'), ('a', 'f'), ('b', 'd'), ('b', 'e'), ('b', 'g'), ('c', 'f'), ('c', 'd'), ('d', 'f'), ('d', 'e'), ('d', 'g'), ('e', 'g'), ('f', 'g'), ('f', 'h'), ('g', 'h'), ('h', 'i'), ('i', 'j')])

def plot_graph(G, weight_name=None):
    import matplotlib.pyplot as plt

    plt.figure()
    pos = nx.spring_layout(G)
    edges = G.edges()
    weights = None

    if weight_name:
        weights = [int(G[u][v][weight_name]) for u,v in edges]
        labels = nx.get_edge_attributes(G,weight_name)
        nx.draw_networkx_edge_labels(G,pos,edge_labels=labels)
        nx.draw_networkx(G, pos, edges=edges, width=weights);
    else:
        nx.draw_networkx(G, pos, edges=edges);

plot_graph(G, weight_name=None)
plt.savefig('example.png')
plt.show()

但问题就在这里,

the nx.get_node_attributes() and nx.draw_networkx_labels()函数不会在标签上包含字典键(在本例中为“type”)(这只适用于 nx.get_edge_attributes() 和 nx.draw_networkx_edge_labels()),并且如果要使用nx.get_node_attributes() and nx.draw_networkx_labels(),原始节点名称将被属性值替换。

我想知道是否有其他方法可以在每个节点外部以字典格式标记属性,同时将节点名称保留在节点内部?我应该如何修改我当前的代码?


的问题nx.draw_networkx_labels()不包含键可以通过创建一个新的字典来解决,该字典将保存表示整个字典作为值的字符串。

node_attrs = nx.get_node_attributes(G, 'type')
custom_node_attrs = {}
for node, attr in node_attrs.items():
    custom_node_attrs[node] = "{'type': '" + attr + "'}"

关于绘图节点名称和属性,您可以使用nx.draw()通常绘制节点名称,然后nx.draw_networkx_labels()绘制属性 - 在这里您可以手动将属性位置移动到节点上方或下方。在下面的块中pos持有节点位置和pos_attrs保存放置在适当节点上方的属性位置。

pos_nodes = nx.spring_layout(G)
pos_attrs = {}
for node, coords in pos_nodes.items():
    pos_attrs[node] = (coords[0], coords[1] + 0.08)

完整示例:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_nodes_from(['a', 'b', 'c', 'd', 'e', 'f', 'g'], type = 'machine')
G.add_nodes_from(['h', 'i', 'j'], type = 'human')
G.add_edges_from([('a', 'c'), ('a', 'b'), ('a', 'd'), ('a', 'f'), ('b', 'd'), ('b', 'e'), ('b', 'g'), ('c', 'f'), ('c', 'd'), ('d', 'f'), ('d', 'e'), ('d', 'g'), ('e', 'g'), ('f', 'g'), ('f', 'h'), ('g', 'h'), ('h', 'i'), ('i', 'j')])

plt.figure()
pos_nodes = nx.spring_layout(G)
nx.draw(G, pos_nodes, with_labels=True)

pos_attrs = {}
for node, coords in pos_nodes.items():
    pos_attrs[node] = (coords[0], coords[1] + 0.08)

node_attrs = nx.get_node_attributes(G, 'type')
custom_node_attrs = {}
for node, attr in node_attrs.items():
    custom_node_attrs[node] = "{'type': '" + attr + "'}"

nx.draw_networkx_labels(G, pos_attrs, labels=custom_node_attrs)
plt.show()

Output:

最后提示:如果您有很多边并且节点属性难以阅读,您可以尝试将边的颜色设置为较浅的灰色。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在节点外部标记 networkx 节点属性 的相关文章

随机推荐

  • 在列表框中搜索

    HI 我正在尝试将文本框放在列表框中进行搜索 我有一个 TextBox SearchText 其中包含以下代码 private void SearchText TextChanged object sender EventArgs e in
  • 如何获取意图服务中的上下文

    场景如下 我有一个 WakefulBroadcastReceiver 它执行以下操作 备份到网络计算机或云端 它设置为在 半夜 当我知道平板电脑可以访问 局域网 备份会将数据存储到实例化 WakefulBroadcastReceiver 的
  • visio 的 vba 编程

    目前 我正在IVR 交互式语音应答 系统工作 要在 IVR 中添加服务 我必须在 visio 中制作流程 该流程具有 IVR 系统卖家提供的预定义形状 形状是用 VBA 编程的 我决定学习VBA来修改预定义的形状 在google中搜索时 它
  • 属性更改时重新构建/重新渲染 Angular2 组件

    如何实施 我的子组件 import Component Input ngOnInit from angular2 core Component selector my component template div In child comp
  • 存储库名称作为 GitHub Action 环境变量?

    如何获取存储库名称 而不是用户或组织 作为 GitHub Actions 中的环境变量 我发现github repository但这包含所有者作为第一部分 如下所示 owner repo Try github event repositor
  • 如何控制 Honeycomb 中的软菜单按钮?

    我有一个应用程序 我想在其中关闭菜单按钮 我正在选择其他人的项目 并且不确定是什么引起了菜单按钮的出现 它没有 做任何事情 有没有办法手动关闭该图标 或者我必须首先找出它被显示的原因 请不要批评寻找解决方法 显然在理想的世界中 我会对代码足
  • C++11 std::bind 和 boost::bind 之间的区别

    两者有什么区别吗 或者我可以安全地替换每次出现的boost bind by std bind在我的代码中 从而消除对Boost的依赖 boost bind 关系运算符重载 http www boost org libs bind bind
  • 为 fa 圆添加边框

    如何给图片添加边框circleFont Awesome 的图标 其实我的结果是 http jsfiddle net 0jhdvj0k http jsfiddle net 0jhdvj0k 边框类似于省略号 而不是圆形边框 table cla
  • Jquery - 更改标签中的文本

    这是标签 有文字 使用 20 公里 使用 jquery 我想将文本 20 Kms 替换为 10 kms 我用手像这样贴上标签 label for applyDistanceSlab 我怎样才能做到这一点 label for applyDis
  • 在嵌套对象内搜索文本(以 Backbone.js 集合为例)

    我有一个backbone js 集合 我需要在其中进行全文搜索 我手头的工具如下 Backbone js 下划线 js jQuery 对于那些不熟悉主干的人 骨干集合只是一个对象 在集合内有一个包含模型的数组 每个模型都有一个带有属性的数组
  • CMake Qt UIC 失败

    我目前正在将我的项目从 qmake 移植到 CMake 并且我遇到了 Qt UIC 的问题 它尝试处理不存在的 UI 文件 而不是我希望它处理的实际文件 我有以下文件层次结构 CMakeLists txt MyProject pro mai
  • Visual Studio 解决方案——有什么方法可以创建“特殊”文件夹吗?

    基本上 我希望我的一个文件夹作为一种 特殊文件夹 出现在其他文件夹上方 类似于 属性 如何拥有自己的特殊位置 即使它是一个文件夹 与 App Data 等相同 这可能吗 默认情况下 Visual Studio 不支持添加特殊项目文件夹 Pr
  • 对外界隐藏内部服务以确保使用正确的高级服务[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在一个电子商务网站上工作 我有广告实体 其中包括属性和照片 属性写入数据库 照片存储在文件系统中 我创建了一个WriterService
  • 在 Dash/Plotly 中显示属性会导致 KeyError

    我正在尝试可视化文档中的引用 为此 我有Elements csv 看起来像这样 Doc Description DocumentID SOP Laboratory This SOP should be used in the lab 104
  • __attribute__((force)) 有什么作用?

    这听起来像是我应该能够通过谷歌搜索的东西 但我找不到很好的参考 到底是做什么的 attribute force 做 如 return attribute force uint32 t p 这是针对 ARM 系统 与 clang 交叉编译的
  • qtmaind.lib 中未解析的外部符号

    我正在尝试将我的 Qt 项目设置从 Visual Studio 2013 升级到 2015 它几乎完成了 但我在 qtmaind lib 中遇到了一些错误 1 gt qtmaind lib qtmain winrt obj 错误LNK201
  • Django:URLconf 中的变量参数

    我一直在寻找这个问题 但找不到任何问题 如果重复的话 抱歉 我正在建立某种电子商务网站 类似于 eBay 当我尝试浏览 类别 和 过滤器 时出现了问题 例如 您可以浏览 监视器 类别 这将向您显示大量监视器和一些应用它们的过滤器 与 eBa
  • Spring Boot:java.lang.IllegalArgumentException:找到多个名为 [spring_web] 的片段

    我在 tomcat 9 上部署 spring boot war 时得到了这个 我尝试了很多解决方案 例如清理项目以及我在 stackoverflow 中找到的所有可能的解决方案 但没有任何效果 其中一个在 web xml 中提供绝对排序 但
  • 具有 2 个中心部分的 Windows Phone 8.1 应用程序

    我创建了一个包含两个中心部分的 WP8 1 中心应用程序 这会产生两个轮毂之间滑动的奇怪行为 它们不会像预期的那样 飞 到位 它更像是垂直可滚动视图 如果我添加第三个集线器部分 一切都会正常工作 我在这里上传了有关它的 YouTube 视频
  • 在节点外部标记 networkx 节点属性

    我正在研究属于两种类型的小示例节点集 human machine 我想在每个节点之外以字典形式标记节点属性networkx图中 如下图的节点c e j所示 我使用MS Word在图表上添加了字典类型的属性 基本图是使用以下代码生成的 imp