在对networkx网络进行动画处理之后,我终于成功使用matplotlib进行了此操作,但是我的网络更改了其布局(节点和边的位置),因此我的网络变得不稳定。这更是一个普遍的问题(如何阻止我的网络更改动画?)。我的动画通话看起来像这样:
def update(it = None):
global gG
global gnodes
global fig
tick(gG,gnodes)
fig.clf()
nx.draw(gG,with_labels=True,node_color = setColorMap(gG,gnodes))
def draw():
global fig
ani = animation.FuncAnimation(fig,update,repeat=True,interval= 1)
plt.show()
gG是图,gNode是节点的字典,而fig是图 间隔不应该是一个间隔,我知道这一点
答案 0 :(得分:2)
问题是默认情况下,networkx使用一种算法来放置节点,该算法首先将节点随机放置,然后将它们四处移动,就好像它们在弹簧末端一样。这样往往会得到一个不错的安排,但是由于起点是随机的,因此每次更改都会如此。
使用pos
参数可以轻松解决此问题。 pos
是一个字典,它存储每个节点的x和y坐标。您可以手动设置它们,或者更容易地,可以让networkx创建它们。
pos = nx.spring_layout(G) #other layouts are available.
nx.draw(G, pos=pos)
这不仅对动画有用,而且在您想要以一种颜色绘制节点的子集而以另一种颜色绘制节点的子集时。
以下是我制作的动画的示例代码:https://epidemicsonnetworks.readthedocs.io/en/latest/_modules/EoN/simulation_investigation.html#Simulation_Investigation.animate
以及使用该代码的一些输出示例:
https://epidemicsonnetworks.readthedocs.io/en/latest/examples/Simulation_Investigation.html