【发布时间】:2026-02-15 04:05:01
【问题描述】:
我想创建一个动画,让我的数据点逐渐出现在我的图表上,并在所有数据点出现时冻结。我已经完成了相关性,我只是不太确定如何仅使用单个点本身来做到这一点
这不会显示任何特别有用的东西,但我认为它看起来很酷,因为我试图在地图上可视化一些位置数据
我知道这不是很清楚,所以请澄清一下,我不太确定如何很好地表达我的问题。
谢谢
【问题讨论】:
标签: python matplotlib
我想创建一个动画,让我的数据点逐渐出现在我的图表上,并在所有数据点出现时冻结。我已经完成了相关性,我只是不太确定如何仅使用单个点本身来做到这一点
这不会显示任何特别有用的东西,但我认为它看起来很酷,因为我试图在地图上可视化一些位置数据
我知道这不是很清楚,所以请澄清一下,我不太确定如何很好地表达我的问题。
谢谢
【问题讨论】:
标签: python matplotlib
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()
编辑:要使动画在 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()
【讨论】: