ニコニコ動画のボーカロイド共演ネットワーク - 驚異のアニヲタ社会復帰への道
↑これと似たようなものを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。