我的动画图像是使用matplotlib imshow动画不改变

问题描述 投票:0回答:1

我想动画通过每个蒙特卡洛周期在我的代码去。然而,图像不更新,并保持相同的一个开始。

ground_state是2D阵列,改变后的每个呼叫来模拟。我已经检查了它的更新得到改变

fig = pyplot.figure()
im = pyplot.imshow(ground_state, animated = True)

def update_fig(*args):
    global ground_state
    simulate(ground_state, 100000, 2.4)
    im.set_data(ground_state)
    return im

ani = animation.FuncAnimation(fig, update_fig, interval = 50)

pyplot.show()

这里的模拟功能: -

def simulate(state, n, T):
    """
    Simulates at temperature T for N iterations.
    """
    def acceptance_ratio(del_E):
        """
        Calculates the acceptance ratio.
        """
        # value of beta = 1 / (boltzmann constant * T)
        beta = 1 / T
        if (del_E) < 0:
            return 1
        else:
            return e ** (-beta * (del_E))

    step = 0
    cycle = 0
    # Single flipping
    for dummy in range(n):
        switch = (random.choice(range(len(state))), 
random.choice(range(len(state))))
        neighbours = nearest_neighbours(switch[0], switch[1], len(state))
        change_E = 0
        for pos in neighbours:
            change_E += 2 * J * state[pos[0]][pos[1]] * state[switch[0][switch[1]]
    p = acceptance_ratio(change_E)
    step += 1
    if step == 100 * 100:
        cycle += 1
    rand_num = random.random()
    if rand_num <= p:
        state[switch[0]][switch[1]] *= -1
    return state
python matplotlib animation imshow
1个回答
0
投票

我们无法知道simulate函数里面发生了什么,但似乎这就是问题的根源,因为其他的代码运行正常和动画,

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

def simulate(*args):
    global ground_state
    ground_state = np.random.randn(5,5)

simulate()

fig = plt.figure()
im = plt.imshow(ground_state, animated = True)

def update_fig(*args):
    global ground_state
    simulate(ground_state, 100000, 2.4)
    im.set_data(ground_state)
    return im

ani = animation.FuncAnimation(fig, update_fig, interval = 50)

plt.show()

animated image

© www.soinside.com 2019 - 2024. All rights reserved.