【问题标题】:How can i make points of a python plot appear over time?我怎样才能使python图的点随着时间的推移而出现?
【发布时间】:2026-02-15 04:05:01
【问题描述】:

我想创建一个动画,让我的数据点逐渐出现在我的图表上,并在所有数据点出现时冻结。我已经完成了相关性,我只是不太确定如何仅使用单个点本身来做到这一点

这不会显示任何特别有用的东西,但我认为它看起来很酷,因为我试图在地图上可视化一些位置数据

我知道这不是很清楚,所以请澄清一下,我不太确定如何很好地表达我的问题。

谢谢

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    matplotlib.animation.FuncAnimation 是适合您的工具。首先创建一个空图,然后在函数中逐渐向其添加数据点。下面这段代码将说明它:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    
    x = np.arange(10)
    y = np.random.random(10)
    
    fig = plt.figure()
    plt.xlim(0, 10)
    plt.ylim(0, 1)
    graph, = plt.plot([], [], 'o')
    
    def animate(i):
        graph.set_data(x[:i+1], y[:i+1])
        return graph
    
    ani = FuncAnimation(fig, animate, frames=10, interval=200)
    plt.show()
    

    结果(另存为gif文件)如下图所示:

    编辑:要使动画在 matplotlib 窗口中结束时看起来停止,您需要使其无限(省略 FuncAnimation 中的 frames 参数),并将帧计数器设置为最后一个您的框架系列中的编号:

    def animate(i):
        if i > 9:
            i = 9
        graph.set_data(x[:i+1], y[:i+1])
        return graph
    
    ani = FuncAnimation(fig, animate, interval=200)
    

    或者,根据this问题的回答,您可以将FuncAnimation中的repeat参数设置为False

    编辑 2: 要为散点图设置动画,您需要一大堆其他方法。一段代码值一千字:

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    
    x = np.arange(10)
    y = np.random.random(10)
    size = np.random.randint(150, size=10)
    colors = np.random.choice(["r", "g", "b"], size=10)
    
    fig = plt.figure()
    plt.xlim(0, 10)
    plt.ylim(0, 1)
    graph = plt.scatter([], [])
    
    def animate(i):
        graph.set_offsets(np.vstack((x[:i+1], y[:i+1])).T)
        graph.set_sizes(size[:i+1])
        graph.set_facecolors(colors[:i+1])
        return graph
    
    ani = FuncAnimation(fig, animate, repeat=False, interval=200)
    plt.show()
    

    【讨论】:

    • 还有没有办法通过单个点而不是列表来设置数据?
    • 第一个问题:这取决于您是想在 matplotlib 窗口中显示图形,还是将其保存为文件并嵌入到演示文稿中。是的,在 matplotlib 窗口中是可能的 - 有关详细信息,请参阅编辑。如果您想停止动画文件 - 这取决于演示软件。
    • 第二个问题:你为什么需要它?如果您有一堆要显示的单个点,您总是可以将它们放在一个列表中。
    • .i 可以更改 .data_set 中点的标记大小和颜色吗?
    • 我需要这样做,这就是为什么我问我是否可以通过单个点而不是列表来设置数据。