基于gradio+networkx库对图结构进行可视化展示

前言

在gradio框架下对蛋白质-蛋白质相互作用网络(PPI网络)进行可视化,并将其在网页前端进行展示。

方法

其实很简单

可以直接使用networkx画图后保存图片,然后使用Gradio框架的image组件进行展示即可。

但实际上gradio还配置了Plot组件,可以用于将matplotlib的figure进行展示

又由于networkx绘图本身又基于matplotlib,所以也可以完成展示。

接下来主要麻烦的地方就是networkx绘图的使用

networkx的设计模式是分离的,图结构的存储和绘制是分开的两个步骤

绘制的时候,需要传入点的坐标,这些坐标有一套成体系的算法,也就是layout算法。

首先绘制点,传入图G,传入layout算法的输出结果pos,然后可以自己设定节点颜色

边也是同理,由于边也是基于点计算的,所以传入点的pos和图的结构G就可以得知边应该怎么绘制,同样线条粗细、样式、颜色、alpha通道也都是可以调整的。

最后是标注label和图例legend绘制,字体、大小也都是可以调整的。

代码:

import random
import networkx as nx
from matplotlib import pyplot as plt
import gradio as grdef get_ppi_figure(xxx):# 假设这是查询PPI网络后的结果图GG = nx.Graph()G.add_edge('1','2',is_infer=True,weight=0.1)G.add_edge('2','1',is_infer=True,weight=0.3)G.add_edge('2','1',is_infer=True,weight=0.3)G.add_edge('2','1',is_infer=True,weight=0.3)G.add_edge('3','4',is_infer=True,weight=0.5)G.add_edge('4','5',is_infer=True,weight=0.7)G.add_edge('a','b',is_infer=False,weight=1.0)#设置查询中心点的颜色nodes = []node_color = []for u in G.nodes():nodes.append(u)if u == 'a':node_color.append("#FFFF00")else:node_color.append('r')#读取边的推理权重edge_is=[]infer_weight=[]edge_not=[]for u,v,d in G.edges(data=True):if d['is_infer']:edge_is.append((u,v))infer_weight.append(d['weight'])else:edge_not.append((u,v))fig =plt.figure()fig.add_subplot()pos = nx.spring_layout(G)# 在node_color传入颜色的list,即可实现每个点有不同的颜色nx.draw_networkx_nodes(G, pos, nodelist=nodes, node_color=node_color)nx.draw_networkx_edges(G, pos, edgelist=edge_not, edge_color='g', label="From Experiment")# 这里使用透明度alpha来表示推理的置信度nx.draw_networkx_edges(G, pos, edgelist=edge_is, edge_color='r', alpha=infer_weight, style="dashed", label="From Prediction")nx.draw_networkx_labels(G, pos)plt.legend(loc="upper right")plt.axis('off')return figdemo = gr.Interface(get_ppi_figure,gr.Textbox(label='Protein ID'),gr.Plot(label='PPI Graph'))
demo.launch(server_port=7000,share=False,debug=True,show_error=True)

采用circular layout 

 

但实践下来,还是感觉不够美观,使用Plot组件始终只是绘制了图片而已,并没有可以交互的图功能(比如拖拽节点,节点缓慢漂浮运动,双击节点整理layout,三维查看图结构等很帅的可视化)

后来搜索了一下cytoscape的可视化js插件,但是由于自己并不是开发前端的专业人员,没能看懂如何把cytoscape.js嵌入进gradio网页端,最后就不了了之了。

所以占坑待填吧,如果有大佬能在评论区给一点建议JS嵌入gradio的建议,感激不尽。

 

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

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

相关文章

MSTP知识点

多生成树协议 在 MSTP(Multiple Spanning Tree Protocol)中,根桥(root)、指定端口(designated port)、备用端口(alternate port)等角色都是确保网络中没有循环并且流量能…

为正在运行的 Docker 容器重启策略,以提高服务的可用性

为正在运行的 Docker 容器重启策略,以提高服务的可用性。 为正在运行的 Docker 容器添加 --restartalways –restartalways 是 Docker 中一个常用的参数,用来设置容器的重启策略。它的作用是确保容器在一定条件下能够自动重启,以提高服务的可用性。 方…

后台管理系统(开箱即用)

很久没有更新博客了,给大家带上一波福利吧,大佬勿扰 现在市面上流行的后台管理模板很多,若依,芋道等,可是这些框架对我们来说可能会有点重,所以我自己从0到1写了一个后台管理模板,你们使用时候可扩展性也会更高 项目主要功能: 成员管理,部门管理&#…

Cursor安装Windows / Ubuntu

一、安装 1、下载软件 2、安装依赖 #安装fuse sudo apt-get install fuse3、将cursor添加到应用程序列表 sudo mv cursor-0.42.5x86_64.AppImage /opt/cursor.appimage #使用自己版本号替换 sudo chmod x /opt/cursor.appimage #给予可执行权限 sudo nano /usr/share/applic…

谷粒商城のRedisESRabbit MQ集群

文章目录 前言一、搭建Redis集群三、搭建ES集群三、搭建Rabbit MQ集群 前言 本篇是谷粒商城集群部署篇,搭建Redis、ES、Rabbit MQ集群实践的个人笔记,也是谷粒商城笔记的最后一篇。集群相关的理论性内容,会放在面试篇的笔记中。 一、搭建Redi…

孙赢利_11月17日_超分周报

一. 康佳PC端实现:1080 → 4K 实时超分 1. 将图像预处理操作从 CPU → GPU 运行 2. 后处理部分操作 从 CPU → GPU 运行 inference_realesrgan_Animal_Video.py import argparse import cv2 import glob import os from basicsr.archs.rrdbnet_arch import RRDBNe…

录的视频怎么消除杂音?从录制到后期的杂音消除攻略

在录制视频时,杂音往往是一个令人头疼的问题。无论是环境噪音、设备噪音还是电磁干扰,杂音的存在都会极大地影响视频的听觉体验。录的视频怎么消除杂音?通过一些前期准备和后期处理技巧,我们可以有效地消除这些杂音,提…

论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法

论文概述 《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题,特基于超声波测距与传统迷宫算法原理,设计出一款可在现实迷宫地…

算法日记 26-27day 贪心算法

接下来的题目有些地方比较相似。需要注意多个条件。 题目:分发糖果 135. 分发糖果 - 力扣(LeetCode) n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每…

vue3点击按钮el-dialog对话框不显示问题

vue3弹框不显示问题,控制台也没报错 把 append-to-body:visible.sync"previewDialogOpen" 改为 append-to-bodyv-model"previewDialogOpen" 就好了。

wordpress使用相关

这里写目录标题 遇到的相关问题WordPress安装插件过程中遇到需要ftp出现确实XMLReader 插件的提示cURL Support Missing(curl 缺失) 遇到的相关问题 WordPress安装插件过程中遇到需要ftp 一般在这个位置 出现确实XMLReader 插件的提示 解决&#xff1a…

21.3D surface

3D surface """ File : 05-decoding-Major Name : 3d_surface.py Author : lyq Date : 2024/11/16 23:10 Envi : PyCharm Description: files details """ import numpy as np import matplotlib.pyplot as plt# 设置全局默认字体…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China,2018年4月established,独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1(星辰处理器) STAT-MC1,主要为满足AIOT应用性能、功…

windows C#-异步编程概述(二)

不要阻塞,而要等待 上述代码演示了一种不好的做法:构建同步代码来执行异步操作。正如所写,此代码会阻止执行它的线程执行任何其他工作。在任何任务正在进行时,它都不会被中断。这就像你把面包放进去后盯着烤面包机一样。你会忽略…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题,用户打开夸克、抖音后,在界面上划动无响应,但是没有ANR。回到Launcher后再次打开夸克/抖音,发现App的界面发生了变化,但是仍然是划不动的。 2 log初分析 复现问题附近的log为: 用户…

【STM32】MPU6050简介

文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册:MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…

【软件测试】设计测试用例的万能公式

文章目录 概念设计测试用例的万能公式常规思考逆向思维发散性思维万能公式水杯测试弱网测试如何进行弱网测试 安装卸载测试 概念 什么是测试用例? 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包…

使用 TensorFlow 实现 ZFNet 进行 MNIST 图像分类

ZFNet(ZF-Net)是由 Matthew Zeiler 和 Rob Fergus 提出的卷积神经网络架构,它在图像分类任务中取得了显著的效果。它在标准卷积神经网络(CNN)的基础上做了一些创新,例如优化了卷积核大小和池化策略&#xf…

如何让手机ip变成动态

在数字化浪潮中,手机已成为我们日常生活中不可或缺的一部分。无论是浏览网页、使用社交媒体还是进行在线购物,手机都扮演着举足轻重的角色。然而,在享受网络带来的便利时,我们也需要关注网络安全和隐私保护。静态IP地址可能让手机…

前端三大组件之CSS,三大选择器,游戏网页仿写

回顾 full stack全栈 Web前端三大组件 结构(html) 样式(css) 动作/交互(js) --- 》 框架vue&#xff0c;安哥拉 div 常用的标签 扩展标签 列表 ul/ol order——有序号 unordered——没序号的黑点 <!DOCTYPE html> <html><head><meta charset"…