【Python】networkx创建图(1)

标签: 编程语言

目录

0、matplotlob画图

1、创建一个无向图

2、调用函数生成经典的graph

3、社交网络

4、社区


0、matplotlob画图

plt.subplot(221)  #生成2*2的组图,并且当前子图在2*2矩阵的第一个位置.第二个位置是222
plt.title('complete_graph') #子图的标题
nx.draw(G, with_labels=True, font_weight='bold') #将graph画出来
plt.axis('on') #需要坐标轴,以便框住graph
plt.xticks([]) #横坐标不需要刻度
plt.yticks([]) #纵坐标不需要刻度

1、创建一个无向图

import matplotlib
import networkx as nx
from PIL import Image
import matplotlib.pyplot as plt
from networkx.drawing.nx_pydot import to_pydot
from matplotlib.font_manager import *



#用于显示图片
def ShowGraph(G):
    # 使用pydot保存图片
    P = to_pydot(G)
    P.write_jpeg('pydot.png')

    # 使用matplotlib保存图片
    pos = nx.shell_layout(G)
    nx.draw(G,pos,with_labels=True)
    plt.savefig('mat.png')
    plt.close()

    # 将前面两张图显示
    plt.subplots(figsize=(12,6))
    # plt.suptitle('Diffrent')
    # 载入matplotlib的图片
    plt.subplot(1,2,1)
    plt.title('matplotlib')
    plt.imshow(Image.open('mat.png'))
    # plt.axis('off')
    # 去掉坐标刻度
    plt.xticks([])
    plt.yticks([])

    # 载入pydot的图片
    plt.subplot(1,2,2)
    plt.title('pydot')
    plt.imshow(Image.open('pydot.png'))
    # plt.axis('off')
    # 去掉坐标刻度
    plt.xticks([])
    plt.yticks([])

    # 显示图片
    plt.show()


if __name__ == '__main__':
    # 解决负号'-'显示为方块的问题
    matplotlib.rcParams['axes.unicode_minus']=False

    # 定义图的节点和边
    nodes=['0','1','2','3','4','5','a','b','c']
    edges=[('0','0',1),('0','1',1),('0','5',1),('0','5',2),('1','2',3),('1','4',5),('2','1',7),('2','4',6),('a','b',0.5),('b','c',0.5),('c','a',0.5)]


    # 定义无向图
    G = nx.Graph()

    # 往图添加节点和边
    G.add_nodes_from(nodes)
    G.add_weighted_edges_from(edges)

    # 显示图片
    ShowGraph(G)
结果如下

可能额外需要安装的包???

conda install -c conda-forge graphviz

2、调用函数生成经典的graph

plt.subplots(2,2,figsize=(15,6))

K_5 = nx.complete_graph(5)
plt.subplot(221)
plt.title('complete_graph')
nx.draw(K_5, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

K_3_5 = nx.complete_bipartite_graph(3, 5)
plt.subplot(222)
plt.title('complete_bipartite_graph')
nx.draw(K_3_5, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

barbell = nx.barbell_graph(10, 10)
plt.subplot(223)
plt.title('barbell_graph')
nx.draw(barbell, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

lollipop = nx.lollipop_graph(10, 20)
plt.subplot(224)
plt.title('lollipop_graph')
nx.draw(lollipop, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

plt.show()

"""
格子graph
"""
G = nx.grid_2d_graph(2,3) # 二维网格图
grid_graph = nx.grid_graph(dim=[1, 3, 4]) # n维网格图
G = nx.hexagonal_lattice_graph(2,3) # m×n的六角形格子图
G = nx.hypercube_graph(3) # n维超立方体图形
G = nx.triangular_lattice_graph(1,3) # 三角格子图



"""
各种已经被命名的小graph
"""
petersen = nx.petersen_graph()
tutte = nx.tutte_graph()
maze = nx.sedgewick_maze_graph()
tet = nx.tetrahedral_graph()



"""
使用随机graph生成器
"""
er = nx.erdos_renyi_graph(10, 0.15)
ws = nx.watts_strogatz_graph(30, 3, 0.1)
ba = nx.barabasi_albert_graph(10, 5)
red = nx.random_lobster(10, 0.9, 0.9)

3、社交网络

plt.subplots(2,2,figsize=(15,6))

#返回Zachary的空手道俱乐部图。
G.clear()
G = nx.karate_club_graph()
plt.subplot(1,2,1)
nx.draw(G,with_labels=True)
plt.title('karate_club_graph')
plt.axis('on')
plt.xticks([])
plt.yticks([])

#戴维斯南方女性社交网络。
G.clear()
G = nx.davis_southern_women_graph()
plt.subplot(1,2,2)
nx.draw(G,with_labels=True)
plt.title('davis_southern_women_graph')
plt.axis('on')
plt.xticks([])
plt.yticks([])

plt.show()

"""
显示图
"""

G = nx.davis_southern_women_graph()
nx.draw(G,with_labels=True)
plt.show()

4、社区

plt.subplots(2,2,figsize=(15,6))

er = nx.caveman_graph(3,3)
plt.subplot(221)
plt.title('caveman_graph')
nx.draw(er, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

ws = nx.random_partition_graph([10,10,10],.25,.01)
plt.subplot(222)
plt.title('random_partition_graph')
nx.draw(ws, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

ba = nx.ring_of_cliques(8, 4)
plt.subplot(223)
plt.title('ring_of_cliques')
nx.draw(ba, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

red = nx.windmill_graph(4,5)
plt.subplot(224)
plt.title('windmill_graph')
nx.draw(red, with_labels=True, font_weight='bold')
plt.axis('on')
plt.xticks([])
plt.yticks([])

plt.show()

5、树

"""
返回随机树
"""
G = nx.random_tree(10)
nx.draw(G,with_labels=True)

 

参考:

完整的教程

NetworkX系列教程(1)-创建graph

NetworkX系列教程(2)-graph生成器

NetworkX系列教程(3)-手动创建graph

NetworkX系列教程(4)-设置graph的信息

NetworkX系列教程(5)-查看graph的信息

NetworkX系列教程(6)-对graph进行操作

NetworkX系列教程(7)-对graph进行分析

NetworkX系列教程(8)-Drawing Graph

NetworkX系列教程(9)-线性代数相关

NetworkX系列教程(10)-算法之一:最短路径问题

NetworkX系列教程(10)-算法之二:最小/大生成树问题

NetworkX系列教程(10)-算法之三:关键路径问题

NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题

NetworkX系列教程(10)-算法之五:广度优先与深度优先

NetworkX系列教程(11)-graph和其他数据格式转换

版权声明:本文为weixin_31866177原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_31866177/article/details/109947055

智能推荐

用python画析取图的准备知识——networkx模块

析取图简介 析取图模型G=(N,A,E)是由Balas提出的,其定义:     N——所有工序组成的节点集(其中 0 和 ※表示两个虚设的起始工序和终止工序)     节点权值==节点工序对应机器上的加工时间;     A——连接同一工件的邻接工序间的有向弧集(...

networkx网络图

networkx网络图 pip install networkx conda install netwrokx...

networkx随机图生成

networkx随机图生成 导入包 新建图 随机概率添加边的函数 添加边 matplotlib画图 连通子图 节点的度 代码...

冒泡排序,及改进方式,性能优化400%>>>附图解加源码

首先源码附上,源码中带有注释,看不懂没关系,源码后面附带图解,最后附上代码效率提升图 源码如下: 方案一:其实实现很简单,两层循环,每次内层迭代出最大的一个值,将其放入数组最后一个位置,外层循环的末端便往前移一位。其原理如下图 方案一代码块: 方案二:优化改进 仔细观察上面的图,我们不难发现当迭代到图下这样的情况时,其实已经全排序好了,但是我们还是需要对它进行1,2,3,4,5,6的迭代,这些情况...

css3常用选择器

先介绍一下基本选择器,如下几种 *:通配符。选择页面的所有元素 E:元素选择器。对页面的一些元素进行选择,如p,div,li等 .class:类选择器 #id:id选择器。一个Id在一个页面中只能选择,这是和类选择器的区别 E F:后代选择器。如ul li。选中ul下的li E>F:子元素选择器。如下,可以用 h1 > strong {color:red;}使h1的子元素strong变...

猜你喜欢

python is not set from command line or npm configuration

问题 猜测原因  python版本冲突 解决方案  去官网找到最新版本python 点击下载,注意记住你下载的目录,下载好以后,打开这个目录下的文件夹,Python310, 整个文件夹复制一下 在项目里运行npm config list --json 找到python的路径   我的是 C:\\Python27\\python.exe 说明项目里用的还是py...

Java8 Stream流操作

前言 我们常常需要将一个容器转化成另一个容器,或是对这个容器中的数据进行批量处理,这时使用Stream流可以大大减少我们的工作量。 1 Stream概述 Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。 那么什么是Stream? Stream将要处理的元素集合看作一种流,在流的过程中,借助St...

带你玩转Visual Studio——带你跳出坑爹的Runtime Library坑

在Windows下进行C++的开发,不可避免的要与Windows的底层库进行交互,然而VS下的一项设置MT、MTd、MD和MDd却经常让人搞迷糊,相信不少人都被他坑过,特别是你工程使用了很多第三库的时候,及容易出现各种链接问题。看一下下面这个错误提示:  LIBCMT.lib(_file.obj) : error LNK2005: ___initstdio already defined...

git 设置 gitignore 忽略 __pycache__

清除git缓存中的pycache 直接删掉硬盘上的文件 如果我想保留硬盘上的这个文件,而只删除版本管理中的文件,就需要加入--cached参数。 切换分支出现问题 尽管我已经删除了__pycache__,硬盘也没有了,但是切换分支的时候依然是会提示本地重写的情况。 提示:需要我在切换分支之前,提交一次更新。 提交了更新之后,再来尝试切换分支,如下: 成功了,说明当做了任何变更之后,切换分支前需要执...

人生苦短,我用Python(二)— 爬取会议网站 EasyChair Smart CFP

寒假留校帮学长写了个爬虫,抓取会议网站上一些CFP信息。想着把一些知识点、坑点记下来,一来做个小总结给工作收收尾,二是以后再遇到好从容应对。 这是我写的第二个比较完善的爬虫了,比第一个要简单许多,完全过程化的代码,而且easychair这个网站页面布局比较友好,适合python新手、前端小白入门练习。但这个网站反爬比较厉害,写爬虫的过程中就被ban了好几次…… 制定抓取...