【图论】如何用networkx和graphviz画图

Storing networkx graph object with non-unique nodes as graphviz file,Asked: Aishwarya Radhakrishnan, Answered: Mohammed Kashif

 

【转注】如何將networkx graph用graphviz畫出來:存為dot文档格式,这个文档graphviz可以识读。

networkx的图有两种数据结构表示:1)node和edge,举例:

#https://stackoverflow.com/questions/58684915/storing-networkx-graph-object-with-non-unique-nodes-as-graphviz-file
import networkx as nx
from graphviz import Source


G = nx.MultiDiGraph()
G.add_nodes_from(list(range(5)))

labels = {
    0: 'a',
    1: 'b',
    2: 'a',
    3: 'c',
    4: 'd'}

G.add_edge(0, 1)
G.add_edge(2, 1)
G.add_edge(3, 2)
G.add_edge(3, 4)

# Add the labels as a separate attribute in each node
nx.set_node_attributes(G, labels, 'label')


pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
nx.draw_networkx_labels(G,pos,labels,font_size=16)


#如何將networkx graph用graphviz畫出來:存為dot.gv文档,这个文档graphviz可以识读。
nx.drawing.nx_agraph.write_dot(G, "dot.gv")
Source.from_file('dot.gv')

2)用邻接矩阵(adjacent matrix)表示,举例:

#https://networkx.github.io/documentation/stable/tutorial.html
import networkx as nx
import numpy as np
from graphviz import Source


#now create a graph from a adjacency matrix
#networkx将不对称矩阵视为对称矩阵,比如2-3有edge,3-2没有edge,那就视为2-3有edge。https://www.youtube.com/watch?v=9tZHNqDpTN4
#矩阵用row vector
A = np.matrix([[0., 1., 1., 0., 1.],
        [1., 0., 1., 1., 1.],
        [1., 1., 0., 1., 9.],
        [0., 1., 1., 0., 1.],
        [1., 1., 0., 1., 0.]])

H = nx.from_numpy_matrix(A) 
nx.draw(H, node_size=1000, with_labels=True, font_weight='bold', font_size=15)

#如何將networkx graph用graphviz畫出來:存為dot.gv文档,这个文档graphviz可以识读。
nx.drawing.nx_agraph.write_dot(H, "dot.gv")
Source.from_file('dot.gv')

如果邻接矩阵edge有weight,举例:

#https://stackoverflow.com/questions/56597840/drawing-weighted-graph-from-adjacency-matrix-with-edge-labels

import matplotlib.pyplot as plt
import networkx as nx
import numpy as np

A = [
    [0, 1,  0,  .8, 0],
    [0, 0,  .4, 0,  .3],
    [0, 0,  0,  0,  0],
    [0, 0,  .6, 0,  .7],
    [0, 0,  0,  .2, 0]]

G = nx.from_numpy_matrix(np.matrix(A), create_using=nx.DiGraph)
layout = nx.spring_layout(G)
nx.draw(G, layout, node_size=1000, with_labels=True, font_weight='bold', font_size=15)
labels = nx.get_edge_attributes(G,'weight')
nx.set_edge_attributes(G, labels, "label")

nx.draw_networkx_edge_labels(G,pos=layout,edge_labels=labels)
plt.show()


#如何將networkx graph用graphviz畫出來:存為dot.gv文档,这个文档graphviz可以识读。
from graphviz import Source
nx.drawing.nx_agraph.write_dot(G, "dot_wt.gv")
Source.from_file('dot_wt.gv')

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值