擦除Julia中的先前数据/图(Plots.jl,GR后端)

时间:2019-09-25 16:44:08

标签: animation plot julia gif ode

我已经用Julia解决了描述粒子运动的ODE,并且将坐标和相应的时间保存在数组中。我想创建一个动画图的gif图像,其中粒子沿着求解的轨迹运动,但是要做到这一点(我提出的唯一方法)是使用scatter绘制粒子的位置,然后随时清除粒子的先前位置。但是我只知道scatter!,它将向图中添加更多粒子,而不是显示粒子位置的变化。那么,如何在每次迭代时擦除以前的图,还是有更聪明的方法呢?如果我想在早期使用图形标记粒子的轨迹,该怎么办?

1 个答案:

答案 0 :(得分:3)

使用Plots.jl无法删除先前的数据。可以使用plotscatter命令而不是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

enter image description here

在当前位置用标记绘制所有先前的步骤:

@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

enter image description here

与上面相同,但旧步骤的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

enter image description here