有关Python Network前面已经写过两篇基础入门文章
Python Network(一)
Python Network(二)
本文主要是代码实战的case,主要看一些小技巧的地方

目录

  • 1. 无向图
    • 1.1 无向图-数据来源数组
    • 1.2 无向图-数据来源外部引入数据
  • 2. 有向图
  • 3. 带权重
    • 3.1 带权重无向图
      • test1
      • test2
      • test3
      • test4
    • 3.2 带权重有向图
  • 4.点分类-线分类-控制点大小
    • 4.1 数据来源添加
    • 4.2 外部引入数据
  • 欣赏

1. 无向图

1.1 无向图-数据来源数组

import networkx as nx
# 创建空的网格
G=nx.Graph()
# 添加节点
G.add_node('JFK')
G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL'])
# G.number_of_nodes()  # 查看节点数,输出结果7# 添加连线
G.add_edges_from([('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')])
G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')])
# 绘制网络图
# nx.draw(G,pos=nx.circular_layout(G),with_labels=True)
nx.draw_networkx(G,pos=nx.circular_layout(G),with_labels=True,alpha=0.5,node_color='yellow',node_shape='s',linewidths=4,width=2,edge_color='blue',style='--',font_size=15,font_color='blue',font_family='SimHei')# pos选用圆形样式,with_labels=True在节点上绘制标签,alpha=0.5节点透明度
#linewidths=4节点边框宽度为4,node_color='yellow'节点颜色设为黄色,node_shape='s'节点的形状设为正方形
# width=2边的线宽2,edge_color='blue'设置边的颜色,style='--'边的线样式,
# font_size=15设置标签字号大小,font_color='blue'设置标签字体颜色,font_family='SimHei'设置标签字体

1.2 无向图-数据来源外部引入数据

import pandas as pd
import networkx as nxNXdata=pd.read_excel('file_name',index_col=0)
nf=nx.from_pandas_adjacency(NXdata) # 从外部引入数据,也可以是dataframe格式nx.draw_networkx(nf,pos=nx.circular_layout(nf),with_labels=True,alpha=0.5)

2. 有向图

#step1:创建空图
import networkx as nx
G=nx.DiGraph() #创建什么都没有的空图#step2:给上述空图加边
start=[1,3,5,7]#边的起点列表
to=[2,4,6,8]#边的终点列表
for j in range(len(start)):G.add_edge(start[j], to[j])
nx.draw(G,with_labels=True)
import matplotlib.pyplot as plt
plt.show()
# 最后两句其实不加,也没什么

3. 带权重

3.1 带权重无向图

test1

#step1:创建空图
import networkx as nx
G=nx.Graph() #创建什么都没有的空图#step2:给上述空图加边
start=[1,3,5,7,9,1]#边的起点列表
to=[2,4,6,8,10,3]#边的终点列表
value=[0.1,1,10,15,5,6] #边的权重列表for j in range(0, len(start)):G.add_weighted_edges_from([(start[j], to[j], value[j])])  # 边的起点,终点,权重
#step3:规定图的输出:边的粗细、节点的摆放位置等
nx.draw(G, with_labels=True,pos=nx.circular_layout(G),width=[float(v['weight']) for (r, c, v) in G.edges(data=True)])

test2

import matplotlib.pyplot as plt
import networkx as nxG = nx.Graph()G.add_edge('a', 'b', weight=0.6)
G.add_edge('a', 'c', weight=0.2)
G.add_edge('c', 'd', weight=0.1)
G.add_edge('c', 'e', weight=0.7)
G.add_edge('c', 'f', weight=0.9)
G.add_edge('a', 'd', weight=0.3)elarge = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] > 0.5]
esmall = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] <= 0.5]pos = nx.spring_layout(G)  # positions for all nodes# nodes
nx.draw_networkx_nodes(G, pos, node_size=700)# edges
nx.draw_networkx_edges(G, pos, edgelist=elarge,width=6)
nx.draw_networkx_edges(G, pos, edgelist=esmall,width=6, alpha=0.5, edge_color='b', style='dashed')# labels
nx.draw_networkx_labels(G, pos, font_size=20, font_family='sans-serif')plt.axis('off')
plt.show()

test3

#!-*- coding:utf8-*-import networkx as nx
import matplotlib.pyplot as plt
import randomG=nx.Graph()
for u, v in nx.barabasi_albert_graph(10,2,seed=1).edges():G.add_edge(u,v,weight=random.uniform(0,0.4))
pos=nx.spring_layout(G,iterations=20)#以下语句绘制以带宽为线的宽度的图
nx.draw_networkx_edges(G,pos,width=[float(d['weight']*10) for (u,v,d) in G.edges(data=True)])
nx.draw_networkx_nodes(G,pos)
plt.show()

test4

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G=nx.Graph()
row=np.array([1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,12,12,13,13,13,14,14,14,15,15,15])
col=np.array([2,6,1,3,7,2,4,8,3,5,9,4,10,11,1,7,2,6,8,12,3,7,9,13,4,8,10,14,5,9,11,15,5,10,15,7,13,8,12,14,9,13,15,10,11,14])
value=np.array([0.330662859,-0.056557883,0.34856477,0.025276874,0.3050114,0.056812521,0.215976866,0.166110907,0.243977276,0.034719714,0.054861118,0.055808871,-0.039043542,0.058437946,-0.101259502,-0.331377311,0.25198946,-0.320123471,-0.02723931,0.119581776,0.176017797,-0.038956472,-0.387752157,0.247796397,0.06440725,-0.393122237,-0.090482266,0.243173972,0.027263426,-0.100215075,-0.341195674,0.056683016,0.026823451,-0.315617694,0.062374324,0.079891108,0.021463222,0.239695667,-0.002095218,0.167027081,0.208919576,0.159271326,0.061775297,0.055081582,0.077116704,0.050641085])#for i in range(1,16):#G.add_node(i)
#
for j in range(0,46):G.add_weighted_edges_from([(row[j],col[j],value[j])])#边的起点,终点,权重#
print(G.edges())
pos = [(1,3),(1,3),(2,3),(3,3),(4,3),(5,3),(1,2),(2,2),(3,2),(4,2),(5,2),(6,2),(2,1),(3,1),(4,1),(5,1)]#元组中的两个数字是第i(从0开始计数)个点的坐标
#这一步固定了点的位置,这里最前面两个重复是因为pos是从0开始的,而上面我的节点是从1开始的。
nx.draw_networkx_edges(G,pos,with_labels=True,edge_color='black',alpha=0.8,font_size=10,width=[float(v['weight']*50) for (r,c,v) in G.edges(data=True)])#
#按照边的权重绘制边的宽度
nx.draw_networkx_nodes(G,pos,with_labels=True)
nx.draw_networkx_labels(G,pos)
plt.savefig('a.png')
plt.show()

3.2 带权重有向图

#step1:创建空图
import networkx as nx
G=nx.DiGraph() #创建什么都没有的空图#step2:给上述空图加边
start=[1,3,5,7,9,1]#边的起点列表
to=[2,4,6,8,10,3]#边的终点列表
value=[0.1,1,10,15,5,6] #边的权重列表for j in range(0, len(start)):G.add_weighted_edges_from([(start[j], to[j], value[j])])  # 边的起点,终点,权重
#
nx.draw(G, with_labels=True,pos=nx.circular_layout(G),width=[float(v['weight']) for (r, c, v) in G.edges(data=True)])
#节点为环状排列,图中的边的粗细与边权息息相关

4.点分类-线分类-控制点大小

4.1 数据来源添加

1.将点进行分类nodelist1和nodelist2
2.根据点将边进行分类,edgelist1为第一类点之间的连线,edgelist2为第二类之间的连线,edgelist3为两类点之间的连线
3.根据点的邻近数控制点的大小:邻近点数/总点数*200
[float(len(list(G.neighbors(i)))/len(G.nodes())*200) for i in nodelist2]

import networkx as nx
# 创建空的网格
G=nx.Graph()
# 添加节点
G.add_node('JFK')
G.add_nodes_from(['SFO','LAX','ATL','FLO','DFW','HNL'])
# 将节点分类
nodelist1=['SFO','LAX','ATL','FLO']
nodelist2=['DFW','HNL','JFK']# 添加边
edge_list=[('JFK','SFO'),('JFK','LAX'),('LAX','ATL'),('FLO','ATL'),('ATL','JFK'),('FLO','JFK'),('DFW','HNL')]
G.add_edges_from(edge_list)
# G.add_edges_from([('OKC','DFW'),('OGG','DFW'),('OGG','LAX')])
# 将边分类
edgelist=G.edges()
edgelist1=[]
for i in range(len(edgelist)):if (edge_list[i][0] in nodelist1) and (edge_list[i][1] in nodelist1):edgelist1.append(edge_list[i])edgelist2=[]
for i in range(len(edgelist)):if (edge_list[i][0] in nodelist2) and (edge_list[i][1] in nodelist2):edgelist2.append(edge_list[i])
edgelist3=[]
for i in edgelist:if i not in edgelist1 or edgelist2:edgelist3.append(i)# 绘制网络图
nx.draw_networkx_nodes(G,pos=nx.shell_layout(G),nodelist=nodelist1,alpha=0.4,node_color='blue',node_shape='p',node_size=[float(len(list(G.neighbors(i)))/len(G.nodes())*200) for i in nodelist1],linewidths=2)
nx.draw_networkx_nodes(G,pos=nx.shell_layout(G),nodelist=nodelist2,alpha=0.4,node_color='red',node_shape='v',node_size=[float(len(list(G.neighbors(i)))/len(G.nodes())*200) for i in nodelist2])nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edgelist1,width=1,edge_color='b')
nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edgelist2,width=2,edge_color='r')
nx.draw_networkx_edges(G,pos=nx.shell_layout(G),edgelist=edgelist3,width=1,edge_color='k')nx.draw_networkx_labels(G,pos=nx.shell_layout(G),font_sizet=20,font_color='k',font_family='SimHei',alpha=1)

4.2 外部引入数据

数据参考Python Network(一)中的6

import pandas as pd
import networkx as nx
# step0 引入数据
NXdata=pd.read_excel(r'C:\Users\qingfeng\Desktop\PyDm_data.xlsx','NXdata',index_col=0)
nf=nx.from_pandas_adjacency(NXdata) # 从外部引入数据,也可以是dataframe格式
#step1 将点分类
nodelist1=['SFO','LAX','ATL','FLO','OGG']
nodelist2=['DFW','HNL','JFK','OKC']#step2 将边分类
edgelist=list(nf.edges()) # 用来获取所有边
# print(list(edgelist))
edgelist1=[]
edgelist2=[]
edgelist3=[]
for i in range(len(edgelist)):if (edgelist[i][0] in nodelist1) and (edgelist[i][1] in nodelist1):edgelist1.append(edgelist[i])
for i in range(len(edgelist)):if (edgelist[i][0] in nodelist2) and (edgelist[i][1] in nodelist2):edgelist2.append(edgelist[i])
for i in edgelist:if i not in edgelist1 or edgelist2:edgelist3.append(i)# step3 绘制网络图
# nx.draw(G)
nx.draw_networkx_nodes(nf,pos=nx.shell_layout(nf),nodelist=nodelist1,alpha=0.4,node_color='blue',node_shape='p',node_size=[float(len(list(nf.neighbors(i)))/len(nf.nodes())*200) for i in nodelist1],linewidths=2)
nx.draw_networkx_nodes(nf,pos=nx.shell_layout(nf),nodelist=nodelist2,alpha=0.4,node_color='red',node_shape='v',node_size=[float(len(list(nf.neighbors(i)))/len(nf.nodes())*200) for i in nodelist2])nx.draw_networkx_edges(nf,pos=nx.shell_layout(nf),edgelist=edgelist1,width=2,edge_color='b')
nx.draw_networkx_edges(nf,pos=nx.shell_layout(nf),edgelist=edgelist2,width=2,edge_color='r')
nx.draw_networkx_edges(nf,pos=nx.shell_layout(nf),edgelist=edgelist3,width=1,edge_color='k')nx.draw_networkx_labels(nf,pos=nx.shell_layout(nf),font_sizet=20,font_color='k',font_family='SimHei',alpha=1)


参考内容有些多,最后的时候也记不清哪个参考哪个,哪个自己写的了,麻烦各位看到哪个是自己写的内容时,可以在评论区加链接,我及时补上

欣赏

import matplotlib.pyplot as plt
import networkx as nxG = nx.cycle_graph(24)
pos = nx.spring_layout(G, iterations=200)
nx.draw(G, pos, node_color=range(24), node_size=800, cmap=plt.cm.Blues)
plt.show()

from __future__ import division
import matplotlib.pyplot as plt
import networkx as nxG = nx.generators.directed.random_k_out_graph(10, 3, 0.5)
pos = nx.layout.spring_layout(G)node_sizes = [3 + 10 * i for i in range(len(G))]
M = G.number_of_edges()
edge_colors = range(2, M + 2)
edge_alphas = [(5 + i) / (M + 4) for i in range(M)]nodes = nx.draw_networkx_nodes(G, pos, node_size=node_sizes, node_color='blue')
edges = nx.draw_networkx_edges(G, pos, node_size=node_sizes, arrowstyle='->',arrowsize=10, edge_color=edge_colors,edge_cmap=plt.cm.Blues, width=2)
# set alpha value for each edge
for i in range(M):edges[i].set_alpha(edge_alphas[i])ax = plt.gca()
ax.set_axis_off()
plt.show()

Python Network(三)案例(无向图,有向图,权重,点线分类与大小粗细)相关推荐

  1. [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析

    从本专栏开始,作者正式研究Python深度学习.神经网络及人工智能相关知识.前一篇文章开启了新的内容--Bert,首先介绍Keras-bert库安装及基础用法及文本分类工作.这篇文章将通过keras- ...

  2. python项目开发案例集锦 豆瓣-Python第三个项目:爬取豆瓣《哪吒之魔童降世》 短评...

    前面爬完网站信息图片之后,今天的又有了个小目标,最近的电影哪吒很火,去豆瓣上看了一下 影评,决定了今天主要是实现Python第三个项目:爬取豆瓣<哪吒之魔童降世> 短评,然后下载在exce ...

  3. [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...

    此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...

  4. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版

    给大家带来的一篇关于Python案例相关的电子书资源,介绍了关于Python.项目开发.Python案例方面的内容,本书是由吉林大学出版社出版,格式为PDF,资源大小99.1 MB,明日科技编写,目前 ...

  5. python 数据分析 实际案例_python实战案例:超市营业额数据分析

    实战是学习的最好途径,效率最高,本文不是很长,通过小小的练习,让大家综合运用基础知识,加深印象巩固记忆. 一.读入数据,了解数据 本数据随机生成的假数据,读者可以自己造,也可以通过下方链接下载,或者后 ...

  6. python 查询sqlserver 视图_SQL Server 2017 数据库教与学(教学大纲,含Python+SQL Server案例)...

    原标题:SQL Server 2017 数据库教与学(教学大纲,含Python+SQL Server案例) 本书提供Python+SQL Server案例 SQL Server教学大纲 一.课程的性质 ...

  7. python新手小案例_10个常见的Python小案例,推荐新手入门学习

    案例一:排列组合 要求: 将4个数字可能组成的所有互不相同且无重复数字的排列组合列出. 分析: 排列就好了 代码: 案例二:阶梯求和 要求: 企业实行阶梯制销售绩效方案.现规定: 销售额低于或等于10 ...

  8. Python基础语法案例(Fibonacci):选择结构、循环结构、异常处理结构、代码优化

    推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书购买链接(京东): ...

  9. Python视频处理案例六则:旋转视频、调整音量/播放速度、淡入淡出、插入转场素材...

    封面图片:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: ============== 环境配置请参考:Python视频处理 ...

最新文章

  1. 想写点什么留下点念想
  2. SSLGET ×××综合实验题
  3. python pymysql 多线程 读写数据库 报错 Packet sequence number wrong
  4. 用计算机弹剪刀刺客,刺客伍六七:阿七使用过的四种武器,剪刀最常用,这个需要臂力!...
  5. html也没锚点,css 锚点定位不了
  6. 小师妹学JavaIO之:文件系统和WatchService
  7. 二次元福利适应个人引导页
  8. ExtJs2.0学习系列(10)--Ext.TabPanel之第二式
  9. Juniper防火墙透明模式
  10. 笔记本电脑排名_商务轻薄本什么品牌好? 五款高性能轻薄商务笔记本电脑排名...
  11. Codeforces - 1191D - Tokitsukaze, CSL and Stone Game - 博弈论
  12. HashMap hash 原理分析
  13. 图书馆占座系统(五)
  14. PowerMockito框架入门及使用
  15. 机器学习:特征选择之RFormula(SparkMLlib中的RFormula)
  16. IP归属地查询(基于本地IP库实现)
  17. spark scala 求整列的总和值
  18. SharePoint服务器端对象模型 之 使用CAML进行数据查询
  19. Java面试进阶指北
  20. 总结两个最近遇到 校园网连不上或丢失WLAN如何解决的方案

热门文章

  1. 站长SEO优化排名选择什么样的站群服务器
  2. Codeforces Round #439 (Div. 2) E. The Untended Antiquity
  3. 基于matlab的天线方向图,基于matlab的天线方向图
  4. 女人要记住的亦舒75句话
  5. 一站式原创文章神器,让你轻松创作高质量文章
  6. 网易换肤第二篇:本地换肤实现!
  7. 前端一键换肤换肤简单探索
  8. 科学的失控与范式的超越——《侏罗纪公园》读后感
  9. 百家号自媒体如何写文章标题,百家号怎么写标题
  10. 微信扫码登入 改变二维码样式