Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >networkx之图遍历和图绘制

networkx之图遍历和图绘制

作者头像
全栈程序员站长
发布于 2022-08-25 00:53:11
发布于 2022-08-25 00:53:11
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

networkx之图遍历和图绘制

文章目录

图数据读取后默认标签(labels)为索引,如何使用编号id?

例如在读取football数据时,其labels都是节点的英文名称,这样在处理图数据时不是很方便,往往报错,我们通常习惯处理节点的编号从1开始,可以建立label-id的反向索引,如果处理图数据时只需要编号id,可以将labels属性设置为id,如果之后还需要查询,可返回反向索引字典

处理函数如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def swap_id_label(G):
    """ 建立id和label的反向索引 return: new_graph :rtype: object """
    nodes = []
    edges = []
    nodes_id = dict()
    nodes_label = dict()
    for id, label in enumerate(G.nodes()):
        nodes_id[label] = id + 1
        nodes_label[id + 1] = label
        nodes.append(id + 1)
    for (u, v) in G.edges():
        edges.append((nodes_id[u], nodes_id[v]))
    new_graph = nx.Graph()
    new_graph.add_nodes_from(nodes)
    for node in nodes:
        new_graph.add_node(node, labels = node)
    new_graph.add_edges_from(edges)
    return new_graph

参考博客:【Python】networkx读取gml图文件,有两个问题影响使用


图数据读取后,如何得到节点集和边集?

在图数据读取后,我们在算法中处理数据时往往会对图的节点集和边集进行处理,下面提供几种遍历方式:


如何绘制多样的图?

在绘制图时,有时我们可能需要为节点着不同的颜色,展示不同属性和大小等等,需要为边添加不同的线型,颜色、粗细等等,这时需要分步绘制,其各类属性如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 画点
draw_networkx_nodes(G, pos, nodelist=None, node_size=300, node_color='#1f78b4', node_shape='o', alpha=None,cmap=None, 
	vmin=None, vmax=None, ax=None, linewidths=None, edgecolors=None, label=None, **kwds)
# 画边
draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k', style='solid', alpha=None, arrowstyle='-|>', arrowsize=10, 
	edge_cmap=None, edge_vmin=None, edge_vmax=None, ax=None, arrows=True, label=None, node_size=300, nodelist=None, 
	node_shape='o', connectionstyle=None, min_source_margin=0, min_target_margin=0, **kwds)
# 标签
draw_networkx_labels(G, pos, labels=None, font_size=12, font_color='k', font_family='sans-serif', font_weight='normal', 
	alpha=None, bbox=None, ax=None, **kwds)
# 边的标签 
draw_networkx_edge_labels(G, pos, edge_labels=None, label_pos=0.5, font_size=10, font_color='k', font_family='sans-serif', 
	font_weight='normal', alpha=None, bbox=None, ax=None, rotate=True, **kwds)

属性参考博客链接:networkx —— 基本操作及画图

🎈

下面以karate_club数据集为例绘制图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import networkx as nx
import matplotlib.pyplot as plt

G = nx.karate_club_graph()

pos = nx.spring_layout(G) # 节点的布局为spring型
plt.figure(figsize = (6, 6)) # 图片大小

nodes = list(G.nodes())
vn = len(nodes)
nodes1 = [nodes[i] for i in range(0, (int)(vn / 2))]
nodes2 = [nodes[i] for i in range((int)(vn / 2), vn)]
nx.draw_networkx_nodes(G, pos = pos, nodelist=nodes1, node_color='r', node_size=140)
nx.draw_networkx_nodes(G, pos = pos, nodelist=nodes2, node_color='y', node_size=80)

edges = list(G.edges())
en = len(edges)
edges1 = [edges[i] for i in range(0, (int)(en / 2))]
edges2 = [edges[i] for i in range((int)(vn / 2), en)]
nx.draw_networkx_edges(G, pos = pos, edgelist=edges1, style='dashed', edge_color='g', width=1.0 , alpha='0.6')
nx.draw_networkx_edges(G, pos = pos, edgelist=edges2, style='dashed', edge_color='b', width=1.0 )

plt.show()

绘制结果如下


详细networkx使用见官网https://networkx.org/ 官方文档已上传至资源☞☞☞传送门networkx.pdf

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141886.html原文链接:https://javaforall.c

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
水流量霍尔传感器工作原理_51单片机温度传感器
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/11
1.2K0
水流量霍尔传感器工作原理_51单片机温度传感器
【51单片机】配置定时器
​ 那么我们先创建一个子函数 void Timer0_Init() ⇥ 对定时器进行初始化。 那么首先是TMOD的一个配置,定时器1我们先不管(高四位定时器全部给上0),只管低四位的一个定时器0的一个配置。 在前面的定时器工作有介绍过,STC89C52 的 T0 和 T1 一共有四种工作模式:在这里我们选择最常用的工作模式1。 Ⅰ:工作模式①的话,我们只需要把 M1 = 0,M0 = 1 就是定时器模式①的配置了。 Ⅱ:C/T(取反):这个我们只需要给C/T(取反) = 0即可,SYSclk⇢系统时钟。 Ⅲ:GATE(门控端),GATE = 0,这里当中都是数字电路当中的一些基础逻辑门,TR0 = 1。
謓泽
2022/12/12
7730
【51单片机】配置定时器
(十三)基于51单片机的简单温度报警装置
        调安全温度范围我们用按键来实现,但是得用定时器来扫描,不然会影响获取温度;
小点点
2022/12/12
4000
STC51单片机中断与定时器配置参考
*外中断INT0--------void intsvr0(void) interrupt 0 using 1
小锋学长生活大爆炸
2020/08/13
1.5K0
STC51单片机中断与定时器配置参考
MCS-51单片机温度控制系统的设计
注塑机是一种常用的制造设备,用于生产塑料制品。在注塑机的工作过程中,溶胶必须达到一定的温度才能被注入模具中进行成型。因此,在注塑机的生产过程中,温度控制是非常重要的一环。
DS小龙哥
2023/09/07
3870
MCS-51单片机温度控制系统的设计
设计分享|单片机8路抢答器
51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X51 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T可选。
电子工程师成长日记
2022/07/27
6870
设计分享|单片机8路抢答器
(六)51单片机基础——定时器
        定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。
小点点
2022/12/12
1.2K0
(六)51单片机基础——定时器
4.1 51单片机-定时器使用
时钟周期:时钟周期T是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率,89C51单片机开发板上常用的晶振是11.0592M,对于这个单片机系统来说,时钟周期=1/11059200 秒。
DS小龙哥
2022/01/12
1.3K0
4.1 51单片机-定时器使用
C51 单片机开发定时器计时10ms的计算
本篇文章整理一下关于定时器如何定时指定的时间,也来详细的整理一下关于定时器/计数器相关的寄存器。本文比较长,中间的过程可能觉得乏味,如果希望直接知道如何简便搞定,直接拉到末尾看 STC-ISP 是如何生成初始化定时器寄存器即可。说实话,这么长的内容不用也会忘记,所以用的时候知道去哪查就行了!
码农UP2U
2024/05/20
5920
C51 单片机开发定时器计时10ms的计算
设计分享|51单片机双定时器控制16位流水灯
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
电子工程师成长日记
2025/02/10
1290
设计分享|51单片机双定时器控制16位流水灯
实验四:定时器实验[通俗易懂]
一、实验目的 1、掌握单片机定时/计数器的使用方法。 2、掌握定时/计数器编程方法。
全栈程序员站长
2022/09/17
1.1K0
实验四:定时器实验[通俗易懂]
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信号幅度变化时(满量程的5%—95%),不影响检测到结果。频率检测的结果通过LCD1602的第一行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5μs的脉冲信号。
timerring
2022/07/20
1K0
山东大学单片机原理与应用实验 3.8 ADC0808/9信号采集实验
八路抢答器单片机c语言程序_八路抢答器单片机c语言程序
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
全栈程序员站长
2022/11/01
1.1K0
4.10 51单片机-使用计数器测量NE555脉冲频率
STC90C51RC/RD+系列单片机内部设置的两个16位定时器/计数器T0和T1都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有一控制-C/T来选择T0或者T1为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.3,T1为P3.3),则为计数方式,每来一个脉冲加1。
DS小龙哥
2022/01/10
1.8K0
4.10 51单片机-使用计数器测量NE555脉冲频率
(十六)51单片机——红外遥控
目录 学习目标 成果展示  硬件知识 简介 硬件电路 NEC编码 遥控器键码 外部中断  中断号 寄存器 代码  红外调控  直流电机 总结  ---- 学习目标         本节知识我们来学习关于红外遥控的部分,重点要学习的是NEC编码和外部中断的知识,好了,让我们开始今天的学习吧! 成果展示  https://live.csdn.net/v/embed/229226 红外遥控) https://live.csdn.net/v/embed/229231 红外调速直流电机 硬件知识 简介    
小点点
2022/12/12
1.3K0
(十六)51单片机——红外遥控
蓝桥杯单片机必备知识—–(8)NE555测频
已经使用跳线帽将P34和NE555的输出端接在一起了,关乎NE555,有些许数电基础的都明白,NE555就是改变RB3,改变负载电阻,使其输出方波的频率发生改变,其中并不涉及任何对NE555的编程,当然你也没法对其编程。
全栈程序员站长
2021/04/15
1.3K0
51单片机+DS1302设计一个电子钟(LCD1602显示时间)
电子钟是一种能够准确显示时间的设备,广泛应用于家庭、办公场所和公共场所,为人们提供了方便和准确的时间信息。本项目设计一个基于51单片机的电子钟,使用DS1302作为RTC时钟芯片,LCD1602作为显示屏,并通过串口方式连接上位机进行时间设置和闹钟设置。
DS小龙哥
2023/11/15
2.1K1
51单片机+DS1302设计一个电子钟(LCD1602显示时间)
51单片机学习 中断及定时/计数实验
T1工作于方式 0 定时,P1.0口输出周期为 8ms 的方波,由仿真结果可以看到,一格为 2 ms,输出方波一个周期占了 4 格。
叶庭云
2021/12/01
1.1K0
51单片机学习     中断及定时/计数实验
C51单片机实验——定时器实验
实验环境:普中实验系统;Keil μVision 4软件; 实验目的: (1)掌握单片机定时器的原理和控制方法。 (2)通过编程利用定时器实现定时功能,并利用该定时功能实现时钟分、秒的功能。 硬件连线: P2^1口连接led1 P2^3 口连接led3 P2^5 口连接led5 P2^7 口连接led7
全栈程序员站长
2022/09/17
7130
检测NE555脉冲发生器产生的频率
在许多工业应用、机械控制以及实验设备中,准确测量和监控信号的频率或转速是确保系统正常运行、提高生产效率以及实现精确控制的关键。频率作为信号的基本参数之一,直接反映了信号的变化速率,而转速则通常通过测量旋转物体的频率来间接获得。
DS小龙哥
2025/05/27
1230
检测NE555脉冲发生器产生的频率
推荐阅读
相关推荐
水流量霍尔传感器工作原理_51单片机温度传感器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验