前回に引き続きJuliaについてです。
ドキュメントに沿って試していきます。
今回はグラフを描画してみたいと思います。
グラフを描く
コマンドラインからグラフを描く
コマンドラインからグラフを描いてみたいと思いますが、コンソールでどうやって描けるんだろ?
PlotsとGRというパッケージを使います。
sh-3.2$ julia
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.0.0 (2018-08-08)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |
julia> import Pkg
julia> Pkg.add("Plots")
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
Resolving package versions...
Updating `~/.julia/environments/v1.0/Project.toml`
[no changes]
Updating `~/.julia/environments/v1.0/Manifest.toml`
[no changes]
julia> Pkg.add("GR")
Resolving package versions...
Updating `~/.julia/environments/v1.0/Project.toml`
[no changes]
Updating `~/.julia/environments/v1.0/Manifest.toml`
[no changes]
julia> using Plots
julia> Plots.gr()
Plots.GRBackend()
julia> f(x)=sin(x)
f (generic function with 1 method)
julia> plot(f)
julia>
なんか画像がでました!GKSTermっていつのまにインストールされてたのか...
調べたところ~/.julia/packages/GR/fnyt8/deps/gr/Applications/GKSTerm.app
としてインストールされてました。
Jupyter notebookでグラフを描く
おなじコマンドでうまくいました。
まず、Jupyter notebookを動かします。
julia> Pkg.add("IJulia")
Resolving package versions...
Updating `~/.julia/environments/v1.0/Project.toml`
[no changes]
Updating `~/.julia/environments/v1.0/Manifest.toml`
[no changes]
julia> using IJulia
julia> IJulia.notebook()
コマンドラインのと同じコマンドをまとめて実行します。
こちらもうまく描画できました。
パッケージについて
PlotsとGRというパッケージはどういうのでしょう?
Plotsパッケージ
Tutorialはこちらです。
具体的にグラフを描くというパッケージなんですかね。
サンプルはこんな感じ
julia> using Plots
julia> x = 1:10; y = rand(10);
julia> plot(x,y)
yを配列にすると2本のグラフも描けます。他にもプロパティを追加したサンプルです。
julia> x = 1:10; y = rand(10,2);
julia> plot(x,y,title="Two Lines",label=["Line 1" "Line 2"],lw=3)
既存の画像にプロパティを追加してみます。
julia> xlabel!("My x label日本語")
X軸にラベルがでました、ただデフォルトだと日本語フォントではないらしく文字化けしました。
画像を保存
julia> savefig("myplot.png")
GKSTermの画面が消えて画像が保存されました。
なぜかフォントが違いますね。
Lorenz Attractor
docs.juliaplots.orgではもっとすごいグラフのサンプルがあります。
# define the Lorenz attractor
mutable struct Lorenz
dt; σ; ρ; β; x; y; z
end
function step!(l::Lorenz)
dx = l.σ*(l.y - l.x) ; l.x += l.dt * dx
dy = l.x*(l.ρ - l.z) - l.y ; l.y += l.dt * dy
dz = l.x*l.y - l.β*l.z ; l.z += l.dt * dz
end
attractor = Lorenz((dt = 0.02, σ = 10., ρ = 28., β = 8//3, x = 1., y = 1., z = 1.)...)
# initialize a 3D plot with 1 empty series
plt = plot3d(1, xlim=(-25,25), ylim=(-25,25), zlim=(0,50),
title = "Lorenz Attractor", marker = 2)
# build an animated gif by pushing new points to the plot, saving every 10th frame
@gif for i=1:1500
step!(attractor)
push!(plt, attractor.x, attractor.y, attractor.z)
end every 10
なんだかすごいです。
GRパッケージ
Plotsのバックエンドとして実際の画像を生成するようです。可視化ライブラリっていうんですかね。
大元はここGR Frameworkなのかな?
Julia Package GRもドキュメント化されてます。
julia> Pkg.add("GR")
Updating registry at `~/.julia/registries/General`
Updating git-repo `https://github.com/JuliaRegistries/General.git`
Resolving package versions...
Updating `~/.julia/environments/v1.0/Project.toml`
[no changes]
Updating `~/.julia/environments/v1.0/Manifest.toml`
[no changes]
julia> using GR
julia> histogram(randn(10000))
今日はこの辺で。