Стирание предыдущих данных / графиков в Julia (Plots.jl, GR backend) - PullRequest
3 голосов
/ 25 сентября 2019

Я решил ODE в Джулии, описывающей движение частицы, и я сохранил координаты и соответствующее время в массиве.Я хотел бы создать анимированное GIF-изображение графика с частицей вдоль решенной траектории, но сделать это (единственный способ, которым я подошел), это изобразить положение частицы с помощью scatter и стеретьпредыдущая позиция частицы каждый момент.Однако я знаю только о scatter!, который будет добавлять больше частиц к графику, а не показывать изменение положения частиц.Так, как я могу стереть предыдущий график каждую итерацию, или есть более умные способы сделать это?А что если я захочу разметить траекторию частицы в более ранние моменты, используя графики?

1 Ответ

1 голос
/ 26 сентября 2019

Удаление предыдущих данных невозможно с помощью 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

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

То же, что и выше, с уменьшением альфа для более старых шагов (показаны только самые новые 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

...