networkx.org

  • 绘制基本网络图
  • 绘制划分后的社区

绘制基本网络图

用matplotlib绘制网络图
基本流程:

  1. 导入networkx,matplotlib包
  2. 建立网络
  3. 绘制网络 nx.draw()
  4. 建立布局 pos = nx.spring_layout美化作用

最基本画图程序

import networkx as nx   #导入networkx包
import matplotlib.pyplot as plt
# 生成一个BA无标度网络G
G = nx.random_graphs.barabasi_albert_graph(50,1)
nx.draw(G)    #绘制网络G
plt.savefig("ba.png")  #输出方式1: 将图存为png格式的图片文件
plt.show()   #输出方式2: 在窗口中显示这幅图像

networkx 提供画图的函数有

  1. draw(G,[pos,ax,hold])
  2. draw_networkx(G,[pos,with_labels])
  3. draw_networkx_nodes(G,pos,[nodelist]) 绘制网络G的节点图
  4. draw_networkx_edges(G,pos[edgelist]) 绘制网络G的边图
  5. draw_networkx_edge_labels(G, pos[, …]) 绘制网络G的边图,边有label

—有layout 布局画图函数的分界线—
6. draw_circular(G, **kwargs) Draw the graph G with a circular layout.
7. draw_random(G, **kwargs) Draw the graph G with a random layout.
8. draw_spectral(G, **kwargs) Draw the graph G with a spectral layout.
9. draw_spring(G, **kwargs) Draw the graph G with a spring layout.
10. draw_shell(G, **kwargs) Draw networkx graph with shell layout.
11. draw_graphviz(G[, prog]) Draw networkx graph with graphviz layout.

networkx画图参数

  • node_size: 指定节点的尺寸大小(默认是300,单位未知,就是上图中那么大的点)
  • node_color: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜色,例如’r’为红色,'b’为绿色等,具体可查看手册),用“数据字典”赋值的时候必须对字典取值(.values())后再赋值
  • node_shape: 节点的形状(默认是圆形,用字符串’o’标识,具体可查看手册)
  • alpha: 透明度 (默认是1.0,不透明,0为完全透明)
  • width: 边的宽度 (默认为1.0)
  • edge_color: 边的颜色(默认为黑色)
  • style: 边的样式(默认为实现,可选: solid|dashed|dotted,dashdot)
  • with_labels: 节点是否带标签(默认为True)
  • font_size: 节点标签字体大小 (默认为12)
  • font_color: 节点标签字体颜色(默认为黑色)

e.g. nx.draw(G,node_size = 30, with_label = False)
绘制节点的尺寸为30,不带标签的网络图。

布局指定节点排列形式

pos = nx.spring_layout()

建立布局,对图进行布局美化,networkx 提供的布局方式有:

  • circular_layout:节点在一个圆环上均匀分布
  • random_layout:节点随机分布
  • shell_layout:节点在同心圆上分布
  • spring_layout: 用Fruchterman-Reingold算法排列节点(不了解,样子类似多中心放射状)
  • spectral_layout:根据图的拉普拉斯特征向量排列节

布局也可用pos参数指定,例如,nx.draw(G, pos = spring_layout(G)) 这样指定了networkx上以中心放射状分布.

绘制划分后的社区

先看一段代码,代码源自site

代码示例

import community
import networkx as nx
import matplotlib.pyplot as plt#better with karate_graph() as defined in networkx example.
#erdos renyi don't have true community structure
G = nx.erdos_renyi_graph(30, 0.05)#first compute the best partition(划分)
partition = community.best_partition(G)#drawing
#set() 函数创建一个无序不重复元素集,可去重。
size = float(len(set(partition.values())))  # 类别数
pos = nx.spring_layout(G) # 图的展示方式(美化作用)
count = 0.
for com in set(partition.values()) :count = count + 1.list_nodes = [nodes for nodes in partition.keys()if partition[nodes] == com]
#     print(list_nodes)nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 30,node_color = str(count / size))nx.draw_networkx_edges(G,pos,with_labels=False, alpha=0.5)
plt.show()


6730733)(output_15_0.png)]

代码详解

  • communit.best_partition 是社区划分方法,算法是根据Vincent D.Blondel 等人于2008提出,是基于modularity optimization的heuristic方法.
  • partition的结果存在字典数据类型:{‘1’: 0, ‘3’: 1, ‘2’: 0, ‘5’: 1, ‘4’: 0, ‘6’: 0}
  1. 单引号里的数据是key,也就是网络中节点编号。
  2. 冒号后面的数值,表示网络中节点的编号属于哪个社区。也就是社区标号。如’6’: 0表示6节点属于0社区
# list_nodes = [nodes for nodes in partition.keys()
#                                 if partition[nodes] == com]
  • 每次循环list_nodes结果是社区i对应的用户编号。
  • 如第一次循环结果是com = 0, list_nodes= [‘1’,‘2’,‘4’,‘6’]
  • 第二次循环的结果是com = 1, list_nodes = [‘3’,‘6’]
  • 这样每次循环,画出一个社区的所有节点:
# nx.draw_networkx_nodes(G, pos, list_nodes, node_size = 50,
#                                 node_color = str(count / size))

循环结束后通过颜色来标识不同社区(nodes)

# nx.draw_networkx_edges(G,pos,with_labels=True, alpha=0.5)

绘制社区的连接关系(edges)

绘制基本网络图(Networkx)相关推荐

  1. python画有权重网络图_使用Python的networkx绘制精美网络图教程

    最近因为数学建模3天速成Python,然后做了一道网络的题,要画网络图.在网上找了一些,发现都是一些很基础的丑陋红点图,并且关于网络的一些算法也没有讲,于是自己进http://networkx.git ...

  2. networkx笔记:绘制基本网络图

    绘制基本网络图 用matplotlib绘制网络图 基本流程: 1. 导入networkx,matplotlib包 2. 建立网络 3. 绘制网络 nx.draw() 4. 建立布局 pos = nx. ...

  3. 用python画关系网络图-使用Python的networkx绘制精美网络图教程

    最近因为数学建模3天速成Python,然后做了一道网络的题,要画网络图.在网上找了一些,发现都是一些很基础的丑陋红点图,并且关于网络的一些算法也没有讲,于是自己进http://networkx.git ...

  4. 使用networkx绘制社交网络图

    使用networkx绘制社交网络图 lot as plt 代码如下. import networkx as nx # 导入networkx import matplotlib.pyplot as pl ...

  5. 【python教程入门学习】利用Python绘制关系网络图

    我们在做数据可视化时,要展现多个元素之间的相互关系时(比如人物关系图),常会用到网络图. 今天我们就分享一个在 Python 里绘制网络图的库:NetworkX,并显示它的基本操作. 一.Networ ...

  6. 【网络】绘制基本网络图

    绘制基本网络图 用matplotlib绘制网络图 基本流程: 1. 导入networkx,matplotlib包 2. 建立网络 3. 绘制网络 nx.draw() 4. 建立布局 pos = nx. ...

  7. R语言绘制社会网络图

    全文阅读:R语言绘制社会网络图| 连享会主页 目录 1. 简介 2. 社会网络基本原理 3. 命令介绍 3.1 layout 布局 3.2 颜色选择 3.3 节点设置 3.4 线条设置 4. 命令实操 ...

  8. R语言如何绘制相互作用网络图(27)

    1.什么是相互作用网络图? 生物网络是复杂网络,也是以系统科学的思想研究生命科学的桥梁.网络中的节点可以是蛋白质,基因,RNA或DNA等,网络的边对应节点之间的物理.生化或功能上的相互作用.生物分子之 ...

  9. 用Python的networkx绘制精美网络图

    最近因为数学建模3天速成Python,然后做了一道网络的题,要画网络图.在网上找了一些,发现都是一些很基础的丑陋红点图,并且关于网络的一些算法也没有讲,于是自己进http://networkx.git ...

  10. python绘制社会关系网络图_python networkx 包绘制复杂网络关系图的实现

    1. 创建一个图 import networkx as nx g = nx.Graph() g.clear() #将图上元素清空 所有的构建复杂网络图的操作基本都围绕这个g来执行. 2. 节点 节点的 ...

最新文章

  1. Node.js Promise.all 限制并发数量
  2. Git push 时每次都需要密码的疑惑
  3. long类型20位示例_Java Long类lowerOneBit()方法与示例
  4. Linux Shell快速入门
  5. 360浏览器打不开qq空间_360浏览器打不开? 60浏览器打不开网页的处理方法(图文)...
  6. MyBatis查询返回类型为int,查询结果为空NULL,报异常解决
  7. [翻译] PPDragDropBadgeView
  8. sf上的SIMD的程序库
  9. Matlab R2008a破解
  10. 洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
  11. Python字符串函数使用详解
  12. 2021年中国商业银行企业避险业务分析:引导企业坚持汇率风险中性理念[图]
  13. 思腾合力-SCM集群下载镜像步骤
  14. 如何高效优雅地下载CMIP6模式数据
  15. C++的std::packaged_task
  16. PDF工具Adobe Arcrobat Pro DC下载安装教程
  17. linux eclipse某些项目,某些项目无法导入,因为它们已存在于Eclipse中的工作空间错误中...
  18. Android客户端异常检测
  19. python对list列表进行排序方法总结
  20. HTML5 单页应用/框架 - View.js介绍

热门文章

  1. html设置word页脚,Word页码从任意页开始如何设置?
  2. 中国睡眠经济行业发展格局与投资策略规划建议报告2022-2027年
  3. leetcode一些常用的工具的总结
  4. 基于EV/EBITDA的量化策略(基于python,附代码)
  5. ubuntu 20.04安装RTL8821CE无线网卡驱动
  6. IC基础(三):跨时钟域处理——电平同步器
  7. inurl:faq.php?action=,什么是财富等级 | 帮助 | 酷狗直播 | 就是歌手多
  8. APP应用平台有哪些?
  9. win7计算机启动遇到错误怎么办,W7电脑系统出现Windows错误恢复该怎么办
  10. uniapp AES加密解密