読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【Python】NetworkXのネットワーク描画をmatplotlibでgifアニメ化

ニコニコ動画のボーカロイド共演ネットワーク - 驚異のアニヲタ社会復帰への道

↑これと似たようなものをPythonで再現してみよう企画その2

 

前回は適当な線グラフをmatplotlib+ImageMagickでgifアニメにしましたが、今回Pythonのネットワークを扱うパッケージであるNetworkXと連携させる方法がわかったのでメモ。

 

下のコードではランダムに枝を追加するグラフを描きましたが、もうちょっと工夫をすれば元の記事同様、ネットワークのノードやリンクの時間発展みたいなのも描けそうです。さらにNetworkXの描画等について調べる必要がありますが。

 

前回のコードとここにあるコードを参考にして作りました。

python - Animating Network Growth with NetworkX and Matplotlib - Stack Overflow

 

「writer='imagemagick'」としてgifアニメを出力してますが、ここの引数を変えればその他の形式(mp4形式など)の動画として出力することもできます

import matplotlib.pyplot as plt
from matplotlib import animation
import networkx as nx
import random

#ネットワーク graph = nx.Graph() def get_fig(node_number): graph.add_node(node_number, Position=(random.randrange(0, 100), random.randrange(0, 100))) graph.add_edge(node_number, random.choice(graph.nodes())) nx.draw(graph, pos=nx.get_node_attributes(graph,'Position')) fig = plt.figure(figsize=(5,4)) anim = animation.FuncAnimation(fig, get_fig, frames=30) anim.save('demoanimation.gif', writer='imagemagick', fps=4);

これで出力されるdemoanimation.gif。

f:id:takeshi0406:20131202205127g:plain