【python】可视化-绘制带有边权重的无向图

文章目录

    • 需求
    • 示例数据
    • 代码实现

需求

输入数据表(矩阵),绘制无向图。

在这里插入图片描述

示例数据

**示例数据1:**3个特征之间的关系数据 (data1.txt)

featuresfeature1feature2feature3
feature110.60.8
feature20.610.3
feature30.80.31

**示例数据2:**4个特征之间的关系数据 (data2.txt)

featuresfeature1feature2feature3feature4
feature110.60.80.7
feature20.610.30.68
feature30.80.310.72
feature40.70.680.721

代码实现

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as pltfrom collections import OrderedDict
import mathdef calculate_circle_points(n, r=1, center=(0, 0)):"""将圆按弧线等分后, 分割点的坐标=========================Parameters----------n: int等分的份数r: float, int, optional[1]圆的半径, 默认[1]center: tuple, optional [(0, 0)]圆的中心, 默认(0, 0)Returns-------points: list划分后的点坐标list"""points = []circumference = 2 * math.pi * r  # 圆的周长for i in range(n):theta = (i / n) * circumference  # 当前等分点所对应的弧长x = center[0] + math.cos(theta)  # x 坐标y = center[1] + math.sin(theta)  # y 坐标points.append((x, y))return pointsdef list2dict_tuple(lst):"""根据list的元素个数, 定义字典的布局===============================布局为一个圆形Paramters---------lst: list输入listRetures-------odict:根据list元素个数 返回每个元素位置字典"""n = len(lst)  # 节点数# 圈上的点坐标circle_points = calculate_circle_points(n)# 坐标和点构成字典odict = OrderedDict()for node_i, point in zip(lst, circle_points):odict[node_i] = pointreturn odictdef draw_nx_graph(matrix, outfig=None, fixed_node=False):"""输入矩阵数据,绘制无向图Parameters----------matrix: DataFrame矩阵数据比如, 多个特征间的相关性矩阵outfig: str, optional [None]默认None, 不输出绘图, 否则设置绘图路径fixed_node: bool, optional [False]固定节点位置- 特征较少时, 可设置为True- 特征较多时, 建议设置为False因为设置固定节点位置, 可能会影响节点之间的边连线或出现边的标签覆盖问题Returns-------None"""# 画布大小plt.figure(figsize=(4, 3))# 创建空的无向图G = nx.Graph()# 添加节点for node in matrix.columns:G.add_node(node)# 添加边for row, col in zip(*matrix.where(pd.np.triu(pd.np.ones(matrix.shape), k=1).astype(bool)).stack().reset_index().drop(columns=0).values.T):value = matrix.loc[row, col]G.add_edge(row, col, weight=value)# 绘制无向图edges = G.edges()weights = [G[u][v]['weight'] for u, v in edges]if fixed_node:# 固定节点位置 (特征较少时)nodelst = G.nodes()  # 获取节点名称listposdict = list2dict_tuple(nodelst)  # 根据list元素个数布局节点位置# posdict = {'feature1': (0, 0), 'feature2': (0, 1), 'feature3': (1, 0)}else: # 特征较多时posdict = None# print(posdict)nx.draw(G, pos=posdict,with_labels=True, font_size=5,  # 节点标签字体 node_color="lightblue",  # 节点颜色node_size=800, width=np.array(weights)*10,)if fixed_node:labels = nx.get_edge_attributes(G, 'weight')nx.draw_networkx_edge_labels(G, posdict, edge_labels=labels,label_pos=0.3,)# nx.draw_networkx_edge_labels(G, pos=nx.spring_layout(G), edge_labels=labels)else:print("NOTE: not fixed note pos, will not add labels of edges. ""And network graph will be changed, every time this script is executed.")# 输出绘图if outfig:plt.savefig(outfig)plt.show(block=False)plt.pause(1)plt.close()def main(datafile, outfig=None, fixed_node=False):# 读取数据matrix = pd.read_csv(datafile, sep='\t', index_col=0)# 调用函数绘制无向图draw_nx_graph(matrix, outfig, fixed_node)

使用示例1:

datafile = './data1.txt'
# outfig = './data1.nx_grpaph.pdf'
main(datafile, fixed_node=True, outfig=None)

在这里插入图片描述

示例2:

datafile = './data2.txt'
# outfig = './data2.nx_grpaph.pdf'
main(datafile, fixed_node=True, outfig=None)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/151217.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年中国汽车座舱行业发展现状及趋势分析:高级人机交互(HMI)系统将逐步提升[图]

2022年有22.3%的汽车用户认为座舱内车载娱乐功能成为影响使用体验的关键因素。当前智能电动汽车的用户画像与娱乐、游戏等应用的用户画像相似,均以年轻人作为目标用户。年轻化的用户将娱乐功能的使用习惯延伸至汽车座舱内,对于座舱功能的需求不再局限于导…

C++ 33.学习C++的意义-狄泰软件学院

一些历史 UNIX操作系统诞生之初是直接用汇编语言编写的随着UNIX系统的发展,汇编语言的开发效率成为瓶颈,所以需要一个新的语言替代汇编语言1971年通过对B语言改良,使其能直接产生机器代码,C语言诞生UNIX使用C语言重写&#xff0c…

mysql双主互从通过KeepAlived虚拟IP实现高可用

mysql双主互从通过KeepAlived虚拟IP实现高可用 在mysql 双主互从的基础上, 架构图: Keepalived有两个主要的功能: 提供虚拟IP,实现双机热备通过LVS,实现负载均衡 安装 # 安装 yum -y install keepalived # 卸载 …

智能AI系统源码ChatGPT系统源码+详细搭建部署教程+AI绘画系统+已支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Chat…

层次架构、面向服务架构(四十四)

层次架构设计 表现层、中间层、数据访问层、数据架构规划、物联网层次架构、层次式架构案例分析。 层次结构缺点就是效率问题,上一层调用下一层。 1、着重写中间层 组件设计:面向接口编程,分为接口和实现类。 实体设计:实体表…

无需公网IP,教学系统如何实现远程一站式管理维护?

全国多所高校应用红亚科技研发的一套教学实验系统平台,此实验系统服务器分别部署在学校内部,与校内的各种教学资源整合在一起,向校内师生提供服务。 红亚总部设立在北京,虽说在全国22个省会均设有办事处,在面对全国多…

【ESP32 + Edge Impulse平台】运行AI算法模拟多传感器数据融合实现异常检测

本篇博文主要以ESP32+MQ Sensor 气体传感器为例,通过连接 Edge Impulse 平台,实现数据的实时采集和训练,进而实现在嵌入式设备上部署 ML 机器学习。本教程介绍如何使用 Edge Impulse 和机器学习来实现ESP32 异常检测系统,系统使用一个机器学习模型,检测气体何时出现异常。…

JOSEF约瑟 闭锁继电器 LB-7 YDB-100 100V 50HZ 控制断路器的合闸或跳闸

闭锁继电器LB-7导轨安装名称:闭锁继电器型号:LB-7闭锁继电器额定电压100V功率消耗≤10VA触点容量220V1.5A40W返回系数≥0.8 LB-1A、LB-1D、DB-1、HBYB-102/D YDB-100、HLO、DB-100、LB-7型闭锁继电器 一、用途 LB-7型闭锁继电器(以下简称继电器)用于发电厂及变电所内高压母线…

Vim教程

目录 vim 介绍 常用的四种模式 首先先学会如何正确进入和退出vim: normal模式 insert模式: command模式: v-block模式: vim异常退出 vim配置 vim 介绍 Vim是一款高度可定制的文本编辑器,它的前身是Vi&#xf…

前端—— 分层模型和应用协议

1 分层模型 MAC地址 可以认为计算机专属,可以认为每台计算机的 MAC地址 固定不变; IP地址 可以认为是计算机当前的【家庭地址】,动态唯一,家庭地址变化,IP地址 也跟着变化; 举个例子,A 给 B 发…

踩坑日记 uniapp 底部 tabber遮挡住购物车结算

tabbar 被购物车结算遮挡 在小程序上tabbar没有将固定栏遮挡,如果直接调高,浏览器H5页面是对了,但在小程序上面离底部的定位就太高了 原代码 // 底部结算样式.shop-foot {border-top: 2rpx solid #F7F7F7;background-color: #FFF;position: …

通过IP地址如何计算相关地址

以IP地址为1921681005 子网掩码是2552552550为例。算出网络地址、广播地址、地址范围、主机数。 分步骤计算 1) 将IP地址和子网掩码换算为二进制,子网掩码连续全1的是网络地址,后面的是主机地址。 虚线前为网络地址,虚线后为主机…

【Pod】

Pod 一、Pod基本概念二、Pod的使用方式pause容器(pod的基础容器)核心功能pause容器使得Pod中所有容器可以共享两种资源:网络和存储网络存储 三、Pod分类自主式Pod/静态pod控制器管理的Pod 四、三种容器五、镜像拉取策略(image Pul…

阿里面试:页面调10 个上游接口,如何做高并发?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易的面试资格,遇到很多很重要的面试题: 一个页面要调100 个上游接口,如何优化? 一个场景…

AI工程化—— 如何让AI在企业多快好省的落地?

作为计算机科学的一个重要领域,机器学习也是目前人工智能领域非常活跃的分支之一。机器学习通过分析海量数据、总结规律,帮助人们解决众多实际问题。随着机器学习技术的发展,越来越多的企业将机器学习技术作为核心竞争力,并运用在…

python读取vivo手机截图,将满屏图片文件移动别的路径

问题之初 python读取vivo手机截图, 将满屏图片文件移动别的路径好多这样的图片,占用手机大量的内存,食之无味弃之可惜!那么会复制粘贴👀代码的我们我们今天就把这些图片筛选清理掉。 这段代码 原有逻辑的基础上&…

智能井盖传感器:城市安全卫士

随着城市人口的不断增加和城市基础设施的不断发展,井盖作为城市道路和排水系统的重要组成部分,承担着确保城市安全和便利性的关键角色。然而,井盖在日常使用中常常面临倾斜、水浸和翻转等问题,这些问题可能导致交通阻塞、行人坠井…

边坡安全监测系统的功能优势

随着科技的进步,边坡安全监测系统在各种工程项目中发挥着越来越重要的作用。这款系统通过实时监测垂直、水平位移数据,以折线图的方式显示在监控平台中,为工程人员提供了直观、便捷的监控工具,从而能够及时掌握边坡稳定状况&#…

Altium Designer培训 | 4 - 原理图创建篇

元件的放置 器件的复制及对齐 导线及NetLabel的添加 Value值的核对 封装的统一管理 原理图的编译设置及检查

tomcat安装,创建web后端项目,部署项目过程

1,安装服务器,使用 Apache免费提供的服务器TomCat,注意JDK版本。 TomCat官方站点 文件解压目录。 启动服务器:bin目录下点击startup.bat,出现小黑框,浏览器默认访问http://127.0.0.1:8080/ 关闭服务器&…