Home > front end >  How to put text at a fixed position when I am updating the axes in matplotlib animation?
How to put text at a fixed position when I am updating the axes in matplotlib animation?

Time:09-23

Here's the whole code: (main problem is explained below)

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
from datetime import datetime as dt
start=dt.now()

def collatz(num):
    if num==1:return 0
    if (num % 2 == 0):return ((num // 2))
    if (num % 2 == 1):return ((3 * num   1))

def ab(num,n,t):
    for i in range(n):
        # if not (num):break
        t.append(num)
        num=collatz(num)
N=820
fig = plt.figure()
ax = plt.axes(xlim=(0, 5), ylim=(0, 1.1*N))
line, = ax.plot([], [], 'g--')
ots, = ax.plot([], [], 'b.')

def init():
    line.set_data([], [])
    ots.set_data([], [])
    return line, ots,

def animate(i):
    t = []
    ab(N, i   1, t)
    y = t
    plt.xlim([0, i 5])
    o=max(t)
    plt.ylim([0, 1.1*o])
    plt.text((i 5)*0.8,o*0.88, ("Seed: "  str(N)))
    x=np.array([k for k in range(0,i 1)])
    line.set_data(x, y)
    ots.set_data(x,y)
    return line, ots,
ount=0
tmp=N
while tmp!=1:
    ount =1
    tmp=collatz(tmp)

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=ount 4, interval=400, blit=False)

plt.show()
print(dt.now()-start)

I used matplotlib.animation to animate the graph. Everything went good.
Now I wanted to put the seed (the number) in top right corner of the graph, so I did this:
plt.text((i 5)*0.8,o*0.88, ("Seed: " str(N)))
This add the text at every frame iteration (as I wanted) but the previous text remains in the graph and move back (because my axes updates).
So how can I put only one text at a fixed position?
I am using PyCharm on Windows 10.
(I am new to matplotlib and python, so any other suggestions are also appreciated.)

CodePudding user response:

You have to initialize a enter image description here

  • Related