これまでいくつかの計算モデルを静的にプロットしてきました。 今回はJuliaのパッケージInteract.jlを使って プロットをgifにしてみます。
Interactとは
インタラクティブなボタンやスライダーやテキストボックスを扱うことができるようになる ライブラリです。 今回はこのライブラリを使用して今までの記事で使用したグラフを動かしてみます。 こちらのサイトを参考にさせていただきました。
基本的には
@gif for 変数 in 始値:間隔:終値 #何らかのプロット end
でgifを作成できます。
分岐図
以前の記事で作成した分岐図を動かしてみます。
using Plots using LinearAlgebra M = 200; #ステップ数 K = 1000; N0 = 10;#初期値 global Population = zeros(M) function recursion(r,K,M,N0) A = zeros(M) A[1] = N0 for i = 1:M-1 A[i+1] = A[i] + r*A[i]*(1-A[i]/K) end return A end p=scatter(0,0) @gif for r in 0.1:0.1:3 Population = recursion(r,K,M,N0) scatter!(r.*ones(20),Population[M-20+1:M],legend = false,color = "black", xlims=(0,4),ylims=(0,1500),xlabel="r",ylabel="Population") endよりカオス現象がわかりやすくなったかと思います。
Cobweb Plots
この記事で紹介したCobweb plotをgifにします。
using Plots tmax = 100 K = 1000 @gif for r in 0.1:0.1:3 Recursionx = [i for i = 1:1200] nextgeneration(r,K,n)= n + r*n*(1-n/K) Recursiony = nextgeneration.(r,K,Recursionx) n0 = 400 Cobnx = Float64[n0;n0] Cobny = Float64[0] push!(Cobny,nextgeneration(r,K,last(Cobnx))) for i=1:100 push!(Cobnx,last(Cobny)) push!(Cobny,last(Cobny)) push!(Cobnx,last(Cobnx)) push!(Cobny,nextgeneration(r,K,last(Cobnx))) end plot(Recursionx,Recursiony,legend=:bottomright,xlabel = "n(t)", ylabel = "n(t+1)",label="Recursion") plot!([0;maximum(Cobnx)],[0;maximum(Cobnx)],ls=:dash,label = "Diagonal") plot!(Cobnx,Cobny,label = "Cobweb") end
このように、簡単にgif動画が作れました。
今回はここまでにします。