zoukankan      html  css  js  c++  java
  • NetworkX-画图

    参考:https://blog.csdn.net/qq951127336/article/details/54586869

    1.创建图

    
    
     1 networkx有四种图 Graph 、DiGraph、MultiGraph、MultiDiGraph,分别为无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。
     2 
     3 import network as nx
     4 
     5 G = nx.Graph()#创建空的网络图
     6 
     7 G = nx.DiGraph()
     8 
     9 G = nx.MultiGraph()
    10 
    11 G = nx.MultiDiGraph()
    12 
    13 #添加点和边:
    14 
    15 G.add_node('a')#添加点a
    16 
    17 G.add_node(1,1)#用坐标来添加点
    18 
    19 G.add_edge('x','y')#添加边,起点为x,终点为y
    20 
    21 G.add_weight_edges_from([('x','y',1.0)])#第三个输入量为权值 也可以
    22 
    23 list = [[('a','b',5.0),('b','c',3.0),('a','c',1.0)]
    24 
    25 G.add_weight_edges_from([(list)])
    26 
    27 #显示:
    28 
    29 #需要导入matplotlib
    30 
    31 import matplotlib.pyplot as plt
    32 
    33 nx.draw(G)
    34 
    35 plt.show()

    显示函数:

    1 nx.draw(G,pos = nx.random_layout(G),node_color = 'b',edge_color = 'r',with_labels = True,font_size =18,node_size =20)
    2 
    3 pos 指的是布局 主要有spring_layout , random_layout,circle_layout,shell_layout。node_color指节点颜色,有rbykw ,同理edge_color. 
    4 with_labels指节点是否显示名字,size表示大小,font_color表示字的颜色。

    参考:https://networkx.github.io/documentation/latest/tutorial.html#drawing-graphs

    2.画出好看的图

     1 两个主要的函数:
     2 
     3 def draw_networkx_edges(G, pos, edgelist=None, width=1.0, edge_color='k',
     4 
     5          style='solid', alpha=1.0, edge_cmap=None, edge_vmin=None, edge_vmax=None,
     6 
     7          ax=None, arrows=True, label=None, **kwds):
     8 
     9 G:图表 一个networkx图
    10 
    11 pos:dictionary 将节点作为键和位置作为值的字典。 位置应该是长度为2的序列。
    12 
    13 edgelist:边缘元组的集合 只绘制指定的边(默认= G.edges())
    14 
    15 width:float或float数组 边线宽度(默认值= 1.016 
    17 edge_color:颜色字符串或浮点数组 边缘颜色。可以是单颜色格式字符串(default ='r'),
    18 
    19 或者具有与edgelist相同长度的颜色序列。 如果指定了数值,它们将被映射到 颜色使用edge_cmap和edge_vmin,edge_vmax参数。
    20 
    21 style:string 边线样式(默认='solid')(实线|虚线|点线,dashdot)
    22 
    23 alpha:float 边缘透明度(默认值= 1.024 
    25 edge_ cmap:Matplotlib色彩映射 用于映射边缘强度的色彩映射(默认值=无)
    26 
    27 edge_vmin,edge_vmax:float 边缘色图缩放的最小值和最大值(默认值=无)
    28 
    29 ax:Matplotlib Axes对象,可选 在指定的Matplotlib轴中绘制图形。
    30 
    31 arrows:bool,optional(default = True) 对于有向图,如果为真,则绘制箭头。
    32 
    33 label:图例的标签
    34 
    35 def draw_networkx_nodes(G, pos, nodelist=None, node_size=300, node_color='r',
    36 
    37           node_shape='o', alpha=1.0, cmap=None, vmin=None, vmax=None, ax=None, linewidths=None, label=None, **kwds):
    38 
    39 pos:dictionary 将节点作为键和位置作为值的字典。 位置应该是长度为2的序列。
    40 
    41 ax:Matplotlib Axes对象,可选 在指定的Matplotlib轴中绘制图形。
    42 
    43 nodelist:list,可选 只绘制指定的节点(默认G.nodes())
    44 
    45 node_size:标量或数组 节点大小(默认值= 300)。如果指定了数组,它必须是 与点头长度相同。
    46 
    47 node_color:颜色字符串或浮点数组 节点颜色。可以是单颜色格式字符串(default ='r'), 或者具有与点头相同长度的颜色序列。
    48 
    49 如果指定了数值,它们将被映射到 颜色使用cmap和vmin,vmax参数。看到 matplotlib.scatter更多详细信息。
    50 
    51 node_shape:string 节点的形状。规格为matplotlib.scatter 标记,'so ^> v <dph8'(默认='o')之一。
    52 
    53 alpha:float 节点透明度(默认值= 1.054 
    55 cmap:Matplotlib色图 色彩映射节点的强度(默认=无)
    56 
    57 vmin,vmax:float 节点色彩映射缩放的最小值和最大值(默认值=无)
    58 
    59 线宽:[无|标量|序列] 符号边框的线宽(默认值= 1.060 
    61 label:[无|串] 图例的标签
    62 
    63 然后基本上所有networkx的超酷精美图的源码你都能快速弄懂了。 
    64 http://networkx.github.io/ 网络图案例源码
    65 
    66 https://networkx.github.io/documentation/latest/auto_examples/index.html#drawing

    3.Example:

     1 import matplotlib.pyplot as plt
     2 import networkx as nx
     3 G = nx.random_geometric_graph(200, 0.125)
     4 # position is stored as node attribute data for random_geometric_graph
     5 pos = nx.get_node_attributes(G, 'pos')
     6 
     7 # find node near center (0.5,0.5)
     8 dmin = 1
     9 ncenter = 0
    10 for n in pos:
    11     x, y = pos[n]
    12     d = (x - 0.5)**2 + (y - 0.5)**2
    13     if d < dmin:
    14         ncenter = n
    15         dmin = d
    16 
    17 # color by path length from node near center
    18 p = dict(nx.single_source_shortest_path_length(G, ncenter))
    19 
    20 plt.figure(figsize=(8, 8))
    21 nx.draw_networkx_edges(G, pos, nodelist=[ncenter], alpha=0.4)
    22 nx.draw_networkx_nodes(G, pos, nodelist=list(p.keys()),
    23                        node_size=80,
    24                        node_color=list(p.values()),
    25                        cmap=plt.cm.Reds_r)
    26 
    27 plt.xlim(-0.05, 1.05)
    28 plt.ylim(-0.05, 1.05)
    29 plt.axis('off')
    30 plt.show()
    result:

     

     

     

     

  • 相关阅读:
    锻炼记录
    PHP学习笔记
    返回一个整数数组中最大子数组的和(2)
    四则运算的在线答题(判断对错,记录错题)
    返回一个二维整数数组的最大子数组的和
    返回一个整数数组中最大子数组的和
    程序2:支持真分数的四则运算
    程序1:四则运算
    四则运算3.0版本
    返回二维数组子数组和最大值
  • 原文地址:https://www.cnblogs.com/Ann21/p/9465088.html
Copyright © 2011-2022 走看看