I’m a new user of JULIA. I’m trying to line by line translation of the following MATLAB code
t=0;
dt =1e-4;
tmax=0.5;
nmax=round(tmax/dt);
for n=1:nmax
t=t+dt;
if mod(n,100)==0
x = 0:0.1:2*pi;
y = sin(x + (n/2));
plot(x, y)
title(sprintf('time=%1.4f',t))
pause(0.1)
end
end
which gives the following output
My attempt for JULIA code is as follow:
using Plots
t=0
dt =1e-4;
tmax=0.5;
nmax=round(tmax/dt);
p=plot()
for n=1:nmax
t=t+dt
if mod(n,100)==0
x = 0:0.1:2π
y = sin.(x .+ (n/2))
plot!(x, y, xlims=(0,2π), ylims=(-1,1),legend=false,fmt=png)
title!("Time = $t")
sleep(0.1)
end
end
p
which gives
I want to have a gif file like MATLAB with same code.
Your help is appreciated
1 Like
ENV["GKS_WSTYPE"] = "mp4"
using GR
function main()
t = 0
dt = 1e-4
tmax = 0.5
nmax = round(tmax / dt)
for n = 1:nmax
t = t + dt
if mod(n, 100) == 0
x = 0:0.1:2π
y = sin.(x .+ (n / 2))
plot(x, y, xlim=(0,2π), ylim=(-1,1), title="Time = $t", grid=false)
end
end
end
main()
1 Like
The above in Julia REFL giving
not a movie.
Also in Jupyter notebook its not giving any output.
Did you set the environment before importing GR?
ENV["GKS_WSTYPE"] = "mp4"
What you probably want to do is this:
using Plots
t=0
dt =1e-4;
tmax=0.5;
nmax=round(tmax/dt);
anim = Animation()
for n=1:nmax
t=t+dt
if mod(n,100)==0
x = 0:0.1:2π
y = sin.(x .+ (n/2))
plot(x, y, xlims=(0,2π), ylims=(-1,1),legend=false,title="Time = $t")
frame(anim)
end
end
gif(anim, "lol.gif", fps=10)
In short, you need to create a special Animation object and load the frames into it. Refer to this manual for more info.
I hope my answer will be helpful.
2 Likes
Plots is a great package. Some, myself included, prefer Makie. It is a litt more involded to get started with, but offers a lot of flexibility.
The documentation for creating videos in make can be found [here](Animations · Makie, where I have linked to the section that uses Observables
to animate a wave with changing time. It should be simple to change the code so that it is the frequency that changes.
Note also that often, creating the video file can take a long time. If I only want to see an animation, and do not need to share the file, I generally love to change the value of an observable in a loop, and just watch the figure as it changes. If you want to do this, use the GLMakie backend, and run Makie.inline(false)
to ensure that you get a standalone plotting window. The plot pane is VSCode does not update when Observables change unless you use WGLMakie, which I generally find to be less responsive and slower than GLMake.