Я хочу «визуально» оживить цепи Маркова, как здесь: http://markov.yoriz.co.uk/, но используя Python вместо html css и javascript.
Я не Не знаю, есть ли какая-нибудь библиотека, которая упрощает это, до сих пор мне удавалось визуально представить цепи Маркова с помощью библиотеки Networkx, как на рисунке ниже, но я не мог заставить его быть анимированным (или смоделированным)
Вот мой код:
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()
введите описание изображения здесь