I want to "visually" animate Markov chains like here : http://markov.yoriz.co.uk/ but using Python instead of html css and javascript.
I don't know if there is any library that makes this easy, till now I managed to make a visual representation of Markov chains using Networkx library like in the figure below, but couldn't get it to be animated (or simulated)
Here is my code so far:
from networkx.drawing.nx_pydot import write_dot import networkx as nx import matplotlib.pyplot as plt states = [(0, 0), (1, 0), (2, 0),] Q = [[5, 5, 0.4], [1, 2, 3], [4, 0.7, 0] ] G = nx.MultiDiGraph() labels={} edge_labels={} for i, origin_state in enumerate(states): for j, destination_state in enumerate(states): rate = Q[i][j] if rate > 0: G.add_edge(origin_state, destination_state, weight=rate, label="{:.02f}".format(rate)) edge_labels[(origin_state, destination_state)] = label="{:.02f}".format(rate) plt.figure(figsize=(10,7)) node_size = 200 pos = {state:list(state) for state in states} nx.draw_networkx_edges(G,pos,width=1.0,alpha=0.5) nx.draw_networkx_labels(G, pos, font_weight=2) nx.draw_networkx_edge_labels(G, pos, edge_labels) plt.axis('off'); plt.show() write_dot(G, 'mc.dot') from subprocess import check_call nfile = 'w.png' check_call(['dot', '-Tpng', 'mc.dot', '-o', nfile]) import matplotlib.image as mpimg img = mpimg.imread(nfile) plt.axis('off') plt.imshow(img) plt.show() 
