我已经用Julia解决了描述粒子运动的ODE,并且将坐标和相应的时间保存在数组中。我想创建一个动画图的gif图像,其中粒子沿着求解的轨迹运动,但是要做到这一点(我提出的唯一方法)是使用scatter
绘制粒子的位置,然后随时清除粒子的先前位置。但是我只知道scatter!
,它将向图中添加更多粒子,而不是显示粒子位置的变化。那么,如何在每次迭代时擦除以前的图,还是有更聪明的方法呢?如果我想在早期使用图形标记粒子的轨迹,该怎么办?
答案 0 :(得分:3)
使用Plots.jl无法删除先前的数据。可以使用plot
或scatter
命令而不是plot!
和scatter!
来删除前一个图。以下是一些示例,如何使用@gif
宏(http://docs.juliaplots.org/latest/animations/)创建动画
创建一些虚拟数据:
using Plots
t = range(0, 4π, length = 100)
r = range(1, 0, length = 100)
x = cos.(t) .* r
y = sin.(t) .* r
在每个步骤中仅绘制最后一个当前点:
@gif for i in eachindex(x)
scatter((x[i], y[i]), lims = (-1, 1), label = "")
end
在当前位置用标记绘制所有先前的步骤:
@gif for i in eachindex(x)
plot(x[1:i], y[1:i], lims = (-1, 1), label = "")
scatter!((x[i], y[i]), color = 1, label = "")
end
与上面相同,但旧步骤的alpha减小(仅显示最新的10个步骤):
@gif for i in eachindex(x)
plot(x[1:i], y[1:i], alpha = max.((1:i) .+ 10 .- i, 0) / 10, lims = (-1, 1), label = "")
scatter!((x[i], y[i]), color = 1, label = "")
end