使用Python的networkx绘制精美网络图教程


Posted in Python onNovember 21, 2019

最近因为数学建模3天速成Python,然后做了一道网络的题,要画网络图。在网上找了一些,发现都是一些很基础的丑陋红点图,并且关于网络的一些算法也没有讲,于是自己进http://networkx.github.io/学习了一下。以下仅博主自己的总结,勿认真,有错误尽情指出,大家一起交流。

需要用到的module malplotlib.pyplot 和networkx

正文:

一、malplotlib和networkx的安装(作者使用的是python2.7 pycharm)

在Python的文件夹目录下Scripts目录中,如果有pip.exe 文件,那么可以用cmd 进入这个目录,然后输入 `pip insall --pre matplotlib`直接下载。如果有easy_install 也可以输入`easy_install。如果都不行就去官网 https://pypi.python.org/pypi/matplotlib/1.5.3`找对应版本下载。

至于networkx,pycharm的porject interpreter里添加就好。

二、创建图

networkx有四种图 Graph 、DiGraph、MultiGraph、MultiDiGraph,分别为无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。

import network as nx 
  G = nx.Graph()#创建空的网络图
  G = nx.DiGraph()
  G = nx.MultiGraph()
  G = nx.MultiDiGraph()

然后是加点和边了,有多种方法

G.add_node('a')#添加点a
G.add_node(1,1)#用坐标来添加点
G.add_edge('x','y')#添加边,起点为x,终点为y
G.add_weight_edges_from([('x','y',1.0)])#第三个输入量为权值
#也可以
list = [[('a','b',5.0),('b','c',3.0),('a','c',1.0)]
G.add_weight_edges_from([(list)])

然后是图形的显示

#需要导入matplotlib
import matplotlib.pyplot as plt


nx.draw(G)
plt.show()

为了让图形更精美我们详解nx.draw()

nx.draw(G,pos = nx.random_layout(G),node_color = 'b',edge_color = 'r',with_labels = True,font_size =18,node_size =20)

pos 指的是布局 主要有spring_layout , random_layout,circle_layout,shell_layout。node_color指节点颜色,有rbykw ,同理edge_color.

with_labels指节点是否显示名字,size表示大小,font_color表示字的颜色。

看到这里,各位应该就能画出大量网站上的基本networkx简单教程了,大概是这个样子

使用Python的networkx绘制精美网络图教程

三、绘制精美的图

如果你想要的图是这样的

使用Python的networkx绘制精美网络图教程

或是这样的

使用Python的networkx绘制精美网络图教程

还是这样的

使用Python的networkx绘制精美网络图教程

使用Python的networkx绘制精美网络图教程

可以继续看下去

首先要掌握两个方法

def draw_networkx_edges(G, pos,
            edgelist=None,
            width=1.0,
            edge_color='k',
            style='solid',
            alpha=1.0,
            edge_cmap=None,
            edge_vmin=None,
            edge_vmax=None,
            ax=None,
            arrows=True,
            label=None,
            **kwds):
G:图表
  一个networkx图
pos:dictionary
  将节点作为键和位置作为值的字典。
  位置应该是长度为2的序列。

edgelist:边缘元组的集合
  只绘制指定的边(默认= G.edges())

width:float或float数组
  边线宽度(默认值= 1.0)

edge_color:颜色字符串或浮点数组
  边缘颜色。可以是单颜色格式字符串(default ='r'),
  或者具有与edgelist相同长度的颜色序列。
  如果指定了数值,它们将被映射到
  颜色使用edge_cmap和edge_vmin,edge_vmax参数。

style:string
  边线样式(默认='solid')(实线|虚线|点线,dashdot)

alpha:float
  边缘透明度(默认值= 1.0)

edge_ cmap:Matplotlib色彩映射
  用于映射边缘强度的色彩映射(默认值=无)

edge_vmin,edge_vmax:float
  边缘色图缩放的最小值和最大值(默认值=无)

ax:Matplotlib Axes对象,可选
  在指定的Matplotlib轴中绘制图形。

arrows:bool,optional(default = True)
  对于有向图,如果为真,则绘制箭头。

label:图例的标签
def draw_networkx_nodes(G, pos,
            nodelist=None,
            node_size=300,
            node_color='r',
            node_shape='o',
            alpha=1.0,
            cmap=None,
            vmin=None,
            vmax=None,
            ax=None,
            linewidths=None,
            label=None,
            **kwds):

G:图表

一个networkx图

pos:dictionary
  将节点作为键和位置作为值的字典。
  位置应该是长度为2的序列。

ax:Matplotlib Axes对象,可选
  在指定的Matplotlib轴中绘制图形。

nodelist:list,可选
  只绘制指定的节点(默认G.nodes())

node_size:标量或数组
  节点大小(默认值= 300)。如果指定了数组,它必须是
  与点头长度相同。

node_color:颜色字符串或浮点数组
  节点颜色。可以是单颜色格式字符串(default ='r'),
  或者具有与点头相同长度的颜色序列。
  如果指定了数值,它们将被映射到
  颜色使用cmap和vmin,vmax参数。看到
  matplotlib.scatter更多详细信息。

node_shape:string
  节点的形状。规格为matplotlib.scatter
  标记,'so ^> v <dph8'(默认='o')之一。

alpha:float
  节点透明度(默认值= 1.0)

cmap:Matplotlib色图
  色彩映射节点的强度(默认=无)

vmin,vmax:float
  节点色彩映射缩放的最小值和最大值(默认值=无)

线宽:[无|标量|序列]
  符号边框的线宽(默认值= 1.0)

label:[无|串]
  图例的标签

然后基本上所有networkx的超酷精美图的源码你都能快速弄懂了。

http://networkx.github.io/ 网络图案例源码

使用Python的networkx绘制精美网络图教程

以上这篇使用Python的networkx绘制精美网络图教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python单例模式实例分析
Jan 14 Python
在Python中使用列表生成式的教程
Apr 27 Python
Python中的条件判断语句与循环语句用法小结
Mar 21 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
python实现俄罗斯方块
Jun 26 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
Python文本处理简单易懂方法解析
Dec 19 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
Python3如何实现Win10桌面自动切换
Aug 11 Python
Python使用Selenium模拟浏览器自动操作功能
Sep 08 Python
Python中使用subprocess库创建附加进程
May 11 Python
利用Python绘制Jazz网络图的例子
Nov 21 #Python
Python TCP通信客户端服务端代码实例
Nov 21 #Python
python绘制随机网络图形示例
Nov 21 #Python
python绘制BA无标度网络示例代码
Nov 21 #Python
Python之指数与E记法的区别详解
Nov 21 #Python
python构建指数平滑预测模型示例
Nov 21 #Python
python实现画出e指数函数的图像
Nov 21 #Python
You might like
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
2014/11/18 PHP
PHP 类与构造函数解析
2017/02/06 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
JS实现新建文件夹功能
2017/06/17 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
python相似模块用例
2016/03/04 Python
python线程池threadpool实现篇
2018/04/27 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
行政助理岗位职责范文
2013/12/03 职场文书
积极向上的团队口号
2014/06/06 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
党员评议自我评价
2015/03/03 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
阿甘正传观后感
2015/06/01 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
《风筝》教学反思
2016/02/23 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL