当前位置: 首页 > 面试题库 >

使用NetworkX和Matplotlib动画化网络增长

经景辉
2023-03-14
问题内容

我想动画一个随时间增长的图形。

这是我到目前为止所拥有的:

fig = plt.figure()
ims = []
graph = nx.Graph()
for i in range(50):
    // Code to modify Graph
    nx.draw(graph, pos=nx.get_node_attributes(graph,'Position'))
    im = plt.draw()
    self.ims.append([im])
ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,repeat_delay=1000)
ani.save('dynamic_images.mp4')
plt.show()

但是,我收到以下错误消息:

 File "main.py", line 204, in <module>
    repeat_delay=1000)
  File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 356, in __init__
    TimedAnimation.__init__(self, fig, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 304, in __init__
    Animation.__init__(self, fig, event_source=event_source, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 53, in __init__
    self._init_draw()
  File "/usr/lib/pymodules/python2.7/matplotlib/animation.py", line 363, in _init_draw
    artist.set_visible(False)
AttributeError: 'NoneType' object has no attribute 'set_visible'
nicomoto@nicomoto-VirtualBox:~/Desktop/CS8903-SpecialProblem/Code/

我想要的是一个动画,您可以在其中看到图形的增长。我可以在每个阶段保存图形,也许可以在matplotlib之外创建动画,但是有什么办法可以使它像这样工作吗?


问题答案:

经过审查,该代码与该问题的相关性不如我想象的那样。但是,我能够使用该SO答案和该SO答案为您拼凑出一个答案。以下代码将创建一个图,向其中添加50个随机节点和50个随机边,并在添加每个节点和边后显示图的图像。代码中的一些关键更改:

  1. 该代码基于使用pylab.ion()(请参阅此处以获取更多信息)。
  2. 您的代码尝试使用一个图形并更改其中的图像。此代码为每个帧创建一个新图形。
  3. 此代码不会写到.mp4。如果您确实需要这样做,我建议您在渲染图形时将图形写到.png文件中,然后再转换为mp4。
  4. 请注意,此代码使用matplotlib.pyplot.pause()代替time.sleep()。如果使用,这些数字将不会显示time.sleep()

祝好运!

import random
import pylab
from matplotlib.pyplot import pause
import networkx as nx
pylab.ion()

graph = nx.Graph()
node_number = 0
graph.add_node(node_number, Position=(random.randrange(0, 100), random.randrange(0, 100)))

def get_fig():
    global node_number
    node_number += 1
    graph.add_node(node_number, Position=(random.randrange(0, 100), random.randrange(0, 100)))
    graph.add_edge(node_number, random.choice(graph.nodes()))
    fig = pylab.figure()
    nx.draw(graph, pos=nx.get_node_attributes(graph,'Position'))
    return fig

num_plots = 50;
pylab.show()

for i in range(num_plots):

    fig = get_fig()
    fig.canvas.draw()
    pylab.draw()
    pause(2)
    pylab.close(fig)


 类似资料:
  • 本文向大家介绍Python Matplotlib 基于networkx画关系网络图,包括了Python Matplotlib 基于networkx画关系网络图的使用技巧和注意事项,需要的朋友参考一下 前言 昨天才开始接触,鼓捣了一个下午,接下来会持续更新,如果哪里有错误的地方,望各位大佬指出,谢谢! 数据描述 两个文件,一个文件包含了网络图的节点,节点存在类别(0,1,2,3)四类,但是0类别舍去

  • 问题内容: 我想用matplotlib制作3D动画,但是我不知道该怎么做。这是我的无效代码。 问题答案: 我使用了以下示例http://matplotlib.org/1.4.1/examples/animation/simple_3danim.html 并修改了您的代码:

  • 问题内容: 我有这个代码。我想添加一个子图来绘制余弦函数。(我不想创建一个类)。第二个图也应动态更新 问题答案: 基本上,您可以使用与示例中的结构非常相似的结构。您只需要创建一个附加轴(子图)和第二条线对象:

  • 问题内容: 我有一个表示网络拓扑结构的networkx弹簧布局。关键节点的颜色为红色,另一个为蓝色。到关键节点边缘的路线用短划线表示。如何在指定的时间间隔内为networkx边缘绘制动画? 问题答案: 尝试该模块。另请参阅这个很棒的教程,

  • 问题内容: 在这里以类似的方式提出了这个问题,但是答案却是我的头(我是python和Web开发的新手),所以我希望有一个更简单的方法,或者可以用不同的方式解释它。 我正在尝试使用matplotlib生成图像并将其提供服务,而无需先将文件写入服务器。我的代码可能有点傻,但是它像这样: 我认为不应该执行pyplot.savefig(’test.png’),而是创建一个cstringIO对象,然后执行以

  • 本文向大家介绍使用Python的networkx绘制精美网络图教程,包括了使用Python的networkx绘制精美网络图教程的使用技巧和注意事项,需要的朋友参考一下 最近因为数学建模3天速成Python,然后做了一道网络的题,要画网络图。在网上找了一些,发现都是一些很基础的丑陋红点图,并且关于网络的一些算法也没有讲,于是自己进http://networkx.github.io/学习了一下。以下仅