Juliaで数値計算 その1:コードサンプル〜基本的計算編〜
https://qiita.com/cometscome_phys/items/31d0b811345a3e12fcef
Juliaで数値計算 その2:コードサンプル〜わかりやすい書き方編〜
https://qiita.com/cometscome_phys/items/dfd63f1f7b51bdda4ca4
に引き続いて、FortranやCからやってきた人のためにJuliaの書き方を紹介する。
この記事はその3である。使いそうなものを適宜追加して更新する予定。
計算した結果をグラフにする時、FortranやCであれば、計算したデータをファイルに書き出してgnuplotなどで可視化することが多いだろう。Juliaであれば、ファイルに書き出さなくてもその場でグラフを出力させることができる。
http://docs.juliaplots.org/latest/
Juliaでプロットする場合、基本的には、Plotsライブラリを使う。その際、様々なバックエンドライブラリがある。どのようなものがあるかは
"プログラミング/julia/グラフの書き方"
https://dora.bk.tsukuba.ac.jp/~takeuchi/?プログラミング%2Fjulia%2Fグラフの書き方
が非常に詳しい。
この記事では、いくつかにしぼって紹介する。
なお、Juliaのバージョンは1.0.0を使用している。
#JuliaBoxの紹介
プロットに関して述べる前に、Juliaを気軽に試したい人のためのJuliaBox
https://juliabox.com
を紹介しておく。GoogleかgithubかLinkedInのアカウントを持っていればすぐにログインできて、ブラウザ上でJuliaを試すことができる。最近Julia 1.0も導入された。自分のPCにインストールする必要がないので、とても簡単。
この記事ではJuliaBox上で動くことを確認している。
2次元プロット
シンプルな場合
まず、一番シンプルな場合。
using Plots
f(x) = cos(x)
x=0.0:0.2:2π #x=0からx=2πまで、0.2刻みの配列を生成
y=f.(x) #関数fをxに適用
plot(x,y)
とすると、JuliaBoxであればグラフが出力される。ここで.はある関数を要素ごとに演算するもので、f.(x)はxのそれぞれの要素にfを適用させたものになる。
グラフのファイル書き出し
グラフは、
savefig("cos.pdf")
でpdfファイルに、
savefig("cos.png")
でpngファイルに書き出される。
複数のプロット
グラフを追加させたければ、先ほどのあとに、
f2(x) = cos(2*x)
y2=map(f2,x)
plot!(x,y2)
とplotのかわりにplot!を使うことで重ねることができる。
また、plot!で追記するのではなく、同時にプロットしたければ、
using Plots
f(x) = cos(x)
x=0.0:0.2:2π #x=0からx=2πまで、0.2刻みの配列を生成
y=f.(x) #関数fをxに適用
f2(x) = cos(2*x)
y2=map(f2,x)
plot(x,[y,y2])
と[y,y2]と並べればよい。
範囲指定
プロットの範囲指定をするには、
using Plots
f(x) = cos(x)
x=0.0:0.2:2π
y= f.(x)
plot(x,y,xlims=(0,1),ylims=(0.5,1))
とxlimsとylimsを使えばよい。これをプロットすると、
となる。
修飾してみる
次に、プロットを修飾してみよう。
using Plots
f(x) = cos(x)
x=0.0:0.2:2π #x=0からx=2πまで、0.2刻みの配列を生成
y=f.(x) #関数fをxに適用
f2(x) = cos(2*x)
x=0.0:0.2:2π
y2=map(f2,x)
xticks_values = [0,π/2,π,3π/2,2π]
xticks_labels = ["0","pi/2","pi","3pi/2","2pi"]
yticks_values = [-1.0,-0.5,0,0.5,1.0]
yticks_labels = ["-1","-1/2","0","1/2","1"]
plot(x,[y,y2],labels=["cos(x)","cos(2x)"],xticks = (xticks_values,xticks_labels),
yticks = (yticks_values,yticks_labels),
shape = [:circle :star5],color=[:green :orange],
xlabel="t[sec]",ylabel="f(t)")
とすると、
が得られる。labelsを使うとグラフのラベルが、xticksを使うとx軸の目盛りが、追加される。