Animate points with labels with matplotlib

后端 未结 3 1016
时光说笑
时光说笑 2020-11-30 08:34

I\'ve got an animation with lines and now I want to label the points. I tried plt.annotate() and I tried plt.text() but the labes don\'t move. This

3条回答
  •  悲哀的现实
    2020-11-30 08:50

    I'm coming here from this question, where an annotation should be updated that uses both xy and xytext. It appears that, in order to update the annotation correctly, one needs to set the attribute .xy of the annotation to set the position of the annotated point and to use the .set_position() method of the annotation to set the position of the annotation. Setting the .xytext attribute has no effect -- somewhat confusing in my opinion. Below a complete example:

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.animation as animation
    
    fig, ax = plt.subplots()
    
    ax.set_xlim([-1,1])
    ax.set_ylim([-1,1])
    
    L = 50
    theta = np.linspace(0,2*np.pi,L)
    r = np.ones_like(theta)
    
    x = r*np.cos(theta)
    y = r*np.sin(theta)
    
    line, = ax.plot(1,0, 'ro')
    
    annotation = ax.annotate(
        'annotation', xy=(1,0), xytext=(-1,0),
        arrowprops = {'arrowstyle': "->"}
    )
    
    def update(i):
    
        new_x = x[i%L]
        new_y = y[i%L]
        line.set_data(new_x,new_y)
    
        ##annotation.xytext = (-new_x,-new_y) <-- does not work
        annotation.set_position((-new_x,-new_y))
        annotation.xy = (new_x,new_y)
    
        return line, annotation
    
    ani = animation.FuncAnimation(
        fig, update, interval = 500, blit = False
    )
    
    plt.show()
    

    The result looks something like this:

    In case that versions matter, this code has been tested on Python 2.7 and 3.6 with matplotlib version 2.1.1, and in both cases setting .xytext had no effect, while .set_position() and .xy worked as expected.

提交回复
热议问题