在散点图上绘制 matplotlib.animation 中的垂直线

时间:2021-05-07 13:55:27

标签: python matplotlib matplotlib-animation

我想使用 matplotlib.annimation 按顺序绘制数据点并绘制已知的垂直线。

我目前的情况如下:

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

x = np.arange(len(data))
y = data


fig = plt.figure()
plt.xlim(0, len(data))
plt.ylim(-8, 8)
graph, = plt.plot([], [], 'o')

def animate(i):
    # line_indicies = func(x[:i+1])
    graph.set_data(x[:i+1], y[:i+1])
    # then I would like something like axvline to plot a vertical line at the indices in line indices 

    return graph

anim = FuncAnimation(fig, animate, frames=100, interval=200)
# anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
plt.show()

我想绘制从 animate 函数中的注释中描述的函数输出的垂直线。

随着处理更多数据点,线条可能会发生变化。

1 个答案:

答案 0 :(得分:1)

我编写代码时的理解是,我想沿着折线图的索引绘制一条垂直线。我决定了竖线的长度和颜色,把代码写成OOP的风格,因为如果不是ax格式写的,会输出两个图。

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

data = np.random.randint(-8,8,(100,))
x = np.arange(len(data))
y = data

fig = plt.figure()
ax = plt.axes(xlim=(0, len(data)), ylim=(-8, 8))
graph, = ax.plot([], [], 'o')
lines, = ax.plot([],[], 'r-', lw=2)

def init(): 
    lines.set_data([],[])
    return 

def animate(i):
    graph.set_data(x[:i+1], y[:i+1])
    # ax.axvline(x=i, ymin=0.3, ymax=0.6, color='r', lw=2)
    lines.set_data([i, i],[-3, 2])
    return graph

anim = FuncAnimation(fig, animate, frames=100, interval=200)
# anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])
plt.show()

enter image description here