How to plot a 4D graph in julia? Can someone please help with this?
Thanks in advance
How to plot a 4D graph in julia? Can someone please help with this?
Thanks in advance
I imagine you will either want to animate or apply a colormap to a 3D plot. Both should be possible with the Makie package. We can’t really help further than that without more information on what you are looking for.
I want to plot the hyperchaotic attractor solution to the 4D Rössler system.
following is the code:
using ModelingToolkit
rosslerattractor = @ode_def begin # define the system
dx = - y - z
dy = x + 0.25 * y + w
dz = 3 + x * z
dw = 0.5 * w - 0.05 * z
end a b c d
u₀ = [0.1; 0.1; 0.1; 0.1] # initial conditions
tspan = (0.0,100.0) # timespan
p = [0.25,3,0.5,0.0] # parameters
prob = ODEProblem(rosslerattractor, u₀, tspan, p) # define the problem
sol = solve(prob) # solve it
plot(sol, vars = (1, 2))
If you interpret one variable, you might be able to use the animation example from the Plots
package.
Here is my suggestion for plotting 4D chaotic attractors. You take the first 3 variables and plot them as coordinates of the 3D plot. The 4th variable you use it to color the trajectory.
For example, this is how I plotted the following 4D chaotic attractor of the Lorenz96 model:
(in Makie.jl with GLMakie.jl as a backend)
Can you please post the source for the whole thing?
One Julia source for Lorenz96 seems to be right here. Missing the nice spaghetti colors. Using this code, computing over Tf = 66.0
seconds and using GR plot back-end:
plot(x,y,z, line_z = w, background=RGB(0,0,0), c=:roma, framestyle=:none,
axis=nothing, lw = 1, label=false, dpi=600)
Sure, sorry that I forgot!
# %% Lorenz96 with 4th coordinate colorplotted
using DynamicalSystems, GLMakie
lo = Systems.lorenz96(4; F = 16.0)
tr = trajectory(lo, 10000.0; dt = 0.01, Ttr = 100.0)
a,b,c,d = columns(tr)
sc = Scene(; backgroundcolor = RGBf0(0.0, 0.0, 0.0))
display(sc)
GLMakie.lines!(sc, a,b,c; color = d, colormap = :tokyo, linewidth = 2.0)
sc[GLMakie.Axis].showaxis = (false, false, false)
sc[GLMakie.Axis].showgrid = (false, false, false)
sc[GLMakie.Axis].ticks.textsize = (0, 0, 0)
display(sc)
This was written before the merge Makie+MakieLayout, so maybe something is slightly off based on current Makie.jl status.
@Datseris, fyi your recipe parameters above seem to produce a lot less spaghetti than displayed in your original plot. Decreasing the transient parameter Ttr
to zero improves a lot but still not the same thing.