使用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错误和解决方法汇总整理
Jun 03 Python
有趣的python小程序分享
Dec 05 Python
Python中使用支持向量机SVM实践
Dec 27 Python
python实现教务管理系统
Mar 12 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
django重新生成数据库中的某张表方法
Aug 28 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
python3实现常见的排序算法(示例代码)
Jul 04 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 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
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
javascript 网页跳转的方法
2008/12/24 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
vue实现微信分享功能
2018/11/28 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[01:02:48]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Liquid
2018/04/03 DOTA
Python导出DBF文件到Excel的方法
2015/07/25 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
使用pth文件添加Python环境变量方式
2020/05/26 Python
python绘制趋势图的示例
2020/09/17 Python
详解KMP算法以及python如何实现
2020/09/18 Python
Python实现自动装机功能案例分析
2020/10/22 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
村干部培训方案
2014/05/02 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
2014年评职称工作总结
2014/11/20 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript