在NetworkX中重现相同图形

问题描述 投票:2回答:1

我想改善我的图表。存在以下问题:

  1. 如何创建一致的图形。每次我执行/运行代码时,图形本身都是不一致的,它将生成不同的图像。网址中显示了不一致的图表。

enter image description here

  1. 如何自定义整个图形/图片尺寸并将其放大
  2. 如何为对象“ a”设置永久位置,使其始终显示在第一个/顶部位置
  3. 如何为每种关系自定义箭头的长度。

感谢有人可以给我一些笔记或建议

这是我的代码:

Unique_liss= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm']

edgesList= [('a', 'b'), ('b', 'c '), ('c ', 'd'), ('d', 'e'), ('d', 'f'), ('e', 'g'), ('f', 'g'), ('g', 'h'), ('h', 'i '), ('i ', 'j'), ('j', 'k'), ('j', 'l'), ('k', 'm'), ('l', 'm')]

import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(Unique_liss)
g.add_edges_from(edgesList)
nx.to_pandas_adjacency(g)

G = nx.DiGraph()
for node in edgesList:
    G.add_edge(*node,sep=',')

A = nx.adjacency_matrix(G).A

nx.draw(G, with_labels=True, node_size = 2000,
        node_color = 'skyblue')
python-3.x matplotlib graph networkx directed-graph
1个回答
1
投票

为了具有确定性的节点布局,可以使用NetworkX的layouts之一,它可以指定seed。这是上图使用nx.spring_layout的示例:

nx.spring_layout

from matplotlib import pyplot as plt seed = 31 pos = nx.spring_layout(G, seed=seed) plt.figure(figsize=(10,6)) nx.draw(G, pos=pos, with_labels=True, node_size = 1500, seed=seed, node_color = 'skyblue')

如果重新运行以上内容,您将获得完全相同的布局。

为了自定义图形大小,您有几个选择。如上所述,最简单的一次将图形尺寸设置为enter image description here。您还可以使用plt.figure(figsize=(x,y))中的scale参数在图形中控制图形的大小。

根据最后一点,您似乎无法为每个边缘设置特定的箭头大小。从[docs](arrowsize:int,optional(default = 10))中,您拥有的是:

arrowsize:int,可选(默认= 10)

因此您只能将此值设置为nx.spring_layout,这将导致所有边缘箭头的大小相等。

© www.soinside.com 2019 - 2024. All rights reserved.