networkx 画有权图_利用NetworkX画网络图

现在各种商业和开源的网络可视化的工具非常多,NetworkX - NetworkX是一个非常重要的网络分析工具。当然它侧重于对网络结构的分析,也包含了网络可视化部分。我最近由于要画一些张量网络图,所以找到了这个工具。另一个值得推荐的是Latex中基于tikz实现的hackl/tikz-network工具,这个更侧重于画图,效果非常漂亮。这里重点介绍NetworkX如何可视化。至于网络拓扑结构的分析,专家可以仔细看相应文档,我只是为了画图,所以只用到关于图的最基本属性。本文共分三个部分,分别是:NetworkX中的基本对象:节点和边;

NetworkX中的可视化函数;

存在的一些问题。

NetworkX中的基本对象:节点和边

NetworkX主要是分析图的结果的,因此可以创建的图的种类很多,这里只利用Graph。在画图前,首先要建立一个网络图,代码如下。

import networkx as nx

G = nx.Graph()

这个时候的图是空的,其中没有任何节点(node)和连接或者说是边(edge)。所以接下来要给G中添加一些节点和边。方法非常多,我们介绍最基本的,add_node和add_edge。

G.add_node(1)

G.add_edge(2,3)

上面两段代码的意思分别是:

1行:增加一个节点1

2行:增加一条边从节点2到节点3,由于没有手动添加节点2,3。程序会自己自动添加2和3。

加入说要画四个原子形成的一维链,那么完整的代码为:

import networkx as nx

G = nx.Graph()

G.add_edge(1,2)

G.add_edge(2,3)

G.add_edge(3,4)

如果这里不用1,2,3,4,标记,用其它任何可hashable的对象都可以,我这里只是画图就不说了。

NetworkX中的可视化函数

如果要把刚才的网络画出来,那么直接调用draw函数即可代码和图如下:

import networkx as nx

from pylab import show

G = nx.Graph()

G.add_edge(1,2)

G.add_edge(2,3)

G.add_edge(3,4)

nx.draw(G)

show()

在默认的情况下,节点的位置是随机的,因此画出来的图并不是一条链,为了让确定的节点出现在特定的位置上,有两种做法。这里由于只是画图,我们利用draw中的pos参数修改,代码如下。注意这里pos是一个字典,key对应于节点的名字,后面是节点的坐标。

import networkx as nx

from pylab import show

G = nx.Graph()

G.add_edge(1,2)

G.add_edge(2,3)

G.add_edge(3,4)

position={1:(1,0),2:(2,0),3:(3,0),4:(4,0)}

nx.draw(G,pos=position)

show()

除了可以控制节点的位置,颜色大小,形状等属性都可以任意设置,比方下面的代码把上面的链条节点改成不同的颜色,大小。

import networkx as nx

from pylab import show

G = nx.Graph()

G.add_edge(1,2)

G.add_edge(2,3)

G.add_edge(3,4)

position={1:(1,0),2:(2,0),3:(3,0),4:(4,0)}

ncolor=['r','b','k','g']

nsize=[600,400,200,100]

nx.draw(G,pos=position,node_color=ncolor,node_shape='>',node_size=nsize)

show()

还可以给每一个节点添加一个名字等等这些通过参数可以设定就不一一介绍了。

如果我们只想画一些节点和一些边,并不想让所有的节点出现,那么可以通过nodelist这个参数控制。比方上面的图,我们不想出现最后一个节点,那么只需要把代码改为:

import networkx as nx

from pylab import show

G = nx.Graph()

G.add_edge(1,2)

G.add_edge(2,3)

G.add_edge(3,4)

position={1:(1,0),2:(2,0),3:(3,0),4:(4,0)}

ncolor=['r','b','k','g']

#nshape=['o','d','>','v']

nsize=[600,400,200,100]

NL=[1,2,3]

nx.draw(G,nodelist=NL,pos=position,node_color=ncolor,node_shape='>',node_size=nsize)

show()

存在的一些问题

如果仔细阅读NetworkX源代码会发现,可视化的方法利用了matplotlib散点图的画法。比方说所有的节点都是用散点图函数scatter来实现的。因此它的使用受限于scatter的能力。并且,在draw当中,接口的参数并没有覆盖scatter接口中所有参数。

比方scatter函数可以修改每一个marker的edgecolor,但是在draw当中就没有。因此如果我们想实现一个facecolor为白色,edgecolor为黑色的node,就必须修改NetworkX的代码。而这一点恰好是我需要的,因为你要给每个node标记一个名字的话,显然白底黑边比较合适。

再比如散点图本身默认的功能,只能实现所有的marker形状是相同的,因此在画散点图的时候,要控制不同的点对应不同的marker,需要使用mask函数过滤。例如Scatter Masked - Matplotlib 2.1.1 documentation。在NetworkX中也不能直接实现,不过可以通过另外两个函数draw_networkx_nodes和draw_networkx_edges分别画节点和边。或者在Graph中添加node和edge的时候,顺便加上相应的属性。

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

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

相关文章

将LINUX变成路由器

LINUX系统是一个强大的网络操作系统&#xff0c;本身就是一个出色的路由器&#xff0c;只要经过非常少的几步设置&#xff0c;就会使用LINUX系统本身成为一台出色的路由器。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />要想使…

使用 Benchmark.NET 测试代码性能

今天&#xff0c;我们将研究如何使用Benchmark.Net来测试代码性能。借助基准测试&#xff0c;我们可以创建基准来验证所做的更改是否按预期工作并且不会导致性能下降。并非每个项目都需要进行基准测试&#xff0c;但是如果您正在开发的是NuGet程序包或通用dll&#xff0c;则很有…

python用reshape二维数组化为一维数组_Python reshape的用法及多个二维数组合并为三维数组的实例...

reshape(shape) &#xff1a; 不改变数组元素&#xff0c;返回一个shape形状的数组&#xff0c;原数组不变。是对每行元素进行处理resize(shape) &#xff1a; 与.reshape()功能一致&#xff0c;但修改原数组In [1]: a np.arange(20)#原数组不变In [2]: a.reshape([4,5])Out[2…

【直观理解】一文搞懂RNN(循环神经网络)基础篇

推荐阅读时间8min~15min 主要内容简介&#xff1a;神经网络基础、为什么需要RNN、RNN的具体结构、以及RNN应用和一些结论 1神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子&#xff0c;只要训练数据足够&#xff0c;给定特定的x&#xff0c;就能得到希望的y&#x…

IIS 7.0 的 ASP.NET 应用程序生命周期概述

本主题介绍在 IIS 7.0 集成模式下运行以及与 .NET Framework 3.0 或更高版本一起运行的 ASP.NET 应用程序的应用程序生命周期。IIS 7.0 还支持经典模式&#xff0c;其行为类似于在 IIS 6.0 中运行的 ASP.NET。有关更多信息&#xff0c;请参见 IIS 5.0 和 6.0 的 ASP.NET 应用程…

python网络运维案例代码库_OLDboy-python第八期运维教程

课程目录&#xff1a;L01-Python8期VIP视频-Day101-开课介绍02-学生介绍03-课程内容介绍04-Python的发展05-Python特性介绍及与其它语言对比06-Python安装及环境准备07-编程风格要求08-Python的数据类型和运算符09-单行和多行注释10-理解ASSIC Unicode UTF-8编码11-使用和导入模…

给新手程序员的16个工作必备小妙招,省下时间去LOL吧!

写在前面&#xff1a; 这个文章核心并不是程序优化的具体技巧&#xff0c;而是拿到一个问题如何思考和利用工具的通用方法。比如即使我们不知道 profiler 这个东西&#xff0c;通过搜索"代码 每一行 时间"也可以很快知道有这样的工具叫做 profiler&#xff0c;并且学…

c#如何识别一张图片的格式

问题窥探在有些时候&#xff0c;我们拿到了一张图片。这张图片的格式是 JPG 还是 PNG&#xff1f;是 BMP 还是只有一帧的 GIF&#xff1f;虽然在大部分情况下&#xff0c;你确实可以把一张 PNG 格式的图片保存成 JPG&#xff0c;在电脑上也能双击打开看。但如果你要写一些程序来…

xftp怎么有root权限_许多人都不懂的Linux系统里的特殊权限!!你真的了解嘛?...

有的朋友一听Linux系统文件还有特殊权限&#xff0c;那头就要爆炸了&#xff0c;那还是接着看看/tmp目录和/usr/bin/passwd文件&#xff0c;怎么回事啊&#xff01;&#xff01;&#xff01;看见没有啊&#xff01;不是应该只有rwx 吗&#xff1f;还有其他的特殊权限( s 跟t )啊…

python中abc属于字符串吗_在Python中,字符串s = 'abc',那么执行表达式s+'d'之后,s的打印结果是( )。...

【单选题】当知道条件为真,想要程序无限执行直到人为停止的话,可以需要下列哪个选项?【单选题】Python3解释器执行 for i,v in enumerate([0,1,2],2):print(i,v)和 for i,v in enumerate([0,1,2]):print(i,v)的结果,你认为对的选项是( )。【单选题】Python3解释器执行AB2C3D.l…

菜单保卫战

前几天和老公去龙之梦&#xff0c;路过米爱粥&#xff0c;只见店员们齐刷刷站成两排&#xff0c;店长在前面训话。 只听店长非常严肃的说&#xff1a;“我们的菜单是很贵的&#xff0c;大家一定要注意。不光是迎宾的事情&#xff0c;也是你们每个人的事情。要经常注意一下&…

我是怎样爬下6万共享单车数据并进行分析的(附代码)

共享经济的浪潮席卷着各行各业&#xff0c;而出行行业是这股大潮中的主要分支。如今&#xff0c;在城市中随处可见共享单车的身影&#xff0c;给人们的生活出行带来了便利。相信大家总会遇到这样的窘境&#xff0c;在APP中能看到很多单车&#xff0c;但走到那里的时候&#xff…

使用 Tye 辅助开发 k8s 应用竟如此简单(三)

使用 Tye 辅助开发 k8s 应用竟如此简单&#xff08;一&#xff09;使用 Tye 辅助开发 k8s 应用竟如此简单&#xff08;二&#xff09;续上篇&#xff0c;这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中如何对数据库进行链接。Newbe.Claptrap 是一个…

mybatis collection标签_一对多的关系,在MyBatis中如何映射?

# 使用collection标签需求&#xff1a;根据用户id查询用户信息的同时获取用户拥有的角色&#xff0c;一个用户可以拥有1个或多个角色。一般情况下&#xff0c;不建议直接修改数据库表对应的实体类。所以这里我们延用之前博客中新建的类SysUserExtend&#xff0c;并添加如下代码…

上传文件白名单_十大常见web漏洞——文件上传漏洞

漏洞介绍在我们浏览网页时&#xff0c;文件上传是非常常见的&#xff0c;比如我们会上传头像、附件、视频等文件&#xff0c;文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的&#xff0c;如果文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型…

Java编程比C编程好吗?《精通Unix下C语言与项目实践》读书笔记(15)

《精通Unix下C语言编程与项目实践》读书笔记(new)文章试读 不拘一个遍程序系列&#xff1a;编程序不能一个脑袋钻到底&#xff0c;有时要学会变通&#xff0c;即所谓的曲线救国。一、二、三、四职场规划&#xff1a;一些杂七杂八的职场感悟吧。不值钱的软件人才 精力充沛与事业…

C# Lambda表达式详解,及Lambda表达式树的创建

每次写博客&#xff0c;第一句话都是这样的&#xff1a;程序员很苦逼&#xff0c;除了会写程序&#xff0c;还得会写博客&#xff01;当然&#xff0c;希望将来的一天&#xff0c;某位老板看到此博客&#xff0c;给你的程序员职工加点薪资吧&#xff01;因为程序员的世界除了苦…

将span隐藏的函数_分类汇总函数Subtotal和Aggregate应用技巧解读

在实际的数据统计分析中&#xff0c;经常会遇到很多复杂的因素&#xff0c;例如&#xff0c;对隐藏的行或计算结果返回错误类型的值不予统计等等……如果此时还用常规的Sum系列、Count系列、Average系列等函数去做数据统计分析&#xff0c;将会是难上加难或者根本无法完成。此时…

粉丝回馈 | 用30天换来了这辈子独一无二的纪念

不知不觉2017年已经临近尾声了&#xff0c;超模君和小木决定趁年末&#xff0c;要给粉丝们一份用心的回馈&#xff0c;感谢这一年来大家对我们的支持与厚爱~ 经过几天几夜的苦思冥想、辗转反侧。。。超模君和小木最终确定了一份超模定制版纪念品&#xff0c;定制版&#xff01;…