networkx:具有一致节点位置的多个数字

时间:2017-02-17 05:29:49

标签: python networking matplotlib graphviz beamer

我正在使用networkx绘制相同图形的多个图形,因为我向图形添加了越来越多的边缘。这些数字包含在幻灯片中的连续幻灯片中。

我希望每个图中的节点显示在每个图中完全相同的位置。不幸的是,虽然我为每个绘图使用相同的定位数据,但每次我添加一个靠近图边的边缘时,图形会缩小一点。

这就是我的意思: enter image description here

这是我目前正在使用的代码:

import networkx as nx
import matplotlib.pyplot as plt
from networkx.drawing.nx_agraph import graphviz_layout

num_nodes = 100
num_edges = range(10, 80, 5)
file_name = "evolution1"

G = nx.gnm_random_graph(num_nodes, num_edges[-1])
pos = graphviz_layout(G, prog="neato")


for (i, ne) in enumerate(num_edges):
    plt.figure(figsize=(4,3))

    nx.draw(G,
            pos,
            with_labels=False,
            node_size=15,
            node_color="black",
            edgelist=G.edges()[:ne])

    plt.axis('off')
    plt.savefig(file_name + "-%s.pdf" %i, format="pdf",
                transparent=True)

我想要的是节点在每个连续的幻灯片上保持相同的停止,这在视觉上更令人愉悦。谁能帮助我?

P.S。如果这是相关的,我将幻灯片中的数字(使用LaTeX / Beamer制作)放入的方式是

\begin{center}
  \multiinclude[<+>][start=0,format=pdf]{pics/evolution1}
\end{center}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我自己找到了答案,对任何有兴趣的人。解决方案是调用plt.xlim和plt.ylim。我添加了以下内容:

maxx = max([coor[0] for coor in pos.values()])
maxy = max([coor[1] for coor in pos.values()])

然后,在将图形保存到文件之前,添加

plt.xlim([-10, maxx + 10])
plt.ylim([-10, maxy + 10])

这解决了这个问题。