Juliaで数値計算 その3:コードサンプル〜2次元プロット・可視化編〜

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を適用させたものになる。

cos.png


グラフのファイル書き出し

グラフは、

savefig("cos.pdf")

でpdfファイルに、

savefig("cos.png")

でpngファイルに書き出される。


複数のプロット

グラフを追加させたければ、先ほどのあとに、

f2(x) = cos(2*x)

y2=map(f2,x)
plot!(x,y2)

とplotのかわりにplot!を使うことで重ねることができる。

cos2.png

また、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を使えばよい。これをプロットすると、

cos3.png

となる。


修飾してみる

次に、プロットを修飾してみよう。

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)")

とすると、

cos3.png

が得られる。labelsを使うとグラフのラベルが、xticksを使うとx軸の目盛りが、追加される。