0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【入門編】Juliaで数学を可視化する #3座標を作成して関数を表示する Google Colaboratory使用

0
Posted at

y軸に目盛りをつける

土台のグラフのy軸に目盛りをつけます。
ylimsを使って縦の範囲を0から4に指定し、yticks=0:1:4で「0から4まで1刻み」で目盛りを表示します。

using Plots # Plotsを使う宣言

# 1. 表示したいグラフの範囲を変数に代入する
x_min, x_max = -5, 5   # X軸で最小-5、最大5の範囲に設定

# 2. グラフの土台用に空のプロットを作成する
plot([],[],    # 「空のデータ」を渡して、枠組みだけ作る
    xlims=(x_min, x_max),    # 横の範囲
    ylims=(0, 4),            # 縦の範囲
    xticks=x_min:1:x_max,    # 横軸(x軸)の目盛りを1刻みにする
    yticks=0:1:4,            # y軸の目盛りを0から4まで1刻みで表示する
    grid=:x,                 # x軸の目盛りから伸びるグリッド線を表示する
    gridalpha=0.3,    # グリッドの透明度
    gridstyle=:dash,    # グリッドを点線にする
    size=(600, 200),         # 画像のサイズ
    label="",    # ラベル(今の段階では非表示)
    legend=false,    # 凡例をオフにする
)

02_04.png

 
y軸から横向きのグリッド線を追加します。
grid=:bothで縦方向だけでなく横方向のグリッド線も表示します。

using Plots # Plotsを使う宣言

# 1. 表示したいグラフの範囲を変数に代入する
x_min, x_max = -5, 5   # X軸で最小-5、最大5の範囲に設定

# 2. グラフの土台用に空のプロットを作成する
plot([],[],    # 「空のデータ」を渡して、枠組みだけ作る
    xlims=(x_min, x_max),    # 横の範囲
    ylims=(0, 4),            # 縦の範囲
    xticks=x_min:1:x_max,    # 横軸(x軸)の目盛りを1刻みにする
    yticks=0:1:4,            # y軸の目盛りを0から4まで1刻みで表示
    grid=:both,              # 【変更】縦方向と横方向のグリッド線を表示
    gridalpha=0.3,    # グリッドの透明度
    gridstyle=:dash,    # グリッドを点線にする
    size=(600, 200),         # 画像のサイズ
    label="",    # ラベル(今の段階では非表示)
    legend=false,    # 凡例をオフにする
)

03-01.png

格子状のグリッドを表示するグラフができました。
斜めの直線を表示してみましょう。x軸、y軸0から、x軸、y軸4に向けて直線を引いてみます。土台のグラフのコードに以下のコメント3以降を付け加えます。

# 3. 0から4までの斜めの矢印をプラス側(右上)に向けて引く
plot!([0, 4], [0, 4],   # 【x=[0, 4] 、y=[0, 4] に設定
      line=(:solid, 2, :blue),
      label=""   # ラベル(今の段階では非表示)
)

03-02.png

この直線はy=xを表したものになります。

座標を作る

0を中心としたグラフを座標の形式に直してみましょう。

その1. 変数を代入して範囲を指定する方法。
using Plots # Plotsを使う宣言

# 1. 表示したいグラフの範囲を変数に代入する
x_min, x_max = -5, 5   # x軸の最小値と最大値を設定
y_min, y_max = -5, 5   # y軸の最小値と最大値を設定

# 2. グラフの土台用に空のプロットを作成する
plot([],[],    # データは渡さず枠組みだけ作る
    xlims=(x_min, x_max),    # x軸の表示範囲
    ylims=(y_min, y_max),    # y軸の表示範囲
    xticks=x_min:1:x_max,    # x軸の目盛りを1刻みにする
    yticks=y_min:1:y_max,    # y軸の目盛りを1刻みにする
    grid=:both,    # 縦方向と横方向にグリッド線を表示
    gridalpha=0.3,   # グリッドの透明度
    gridstyle=:dash,   # グリッドを点線にする
    size=(500, 500),   # 画像のサイズを正方形に設定
    legend=false   # 凡例をオフにする
)

# 3. 原点(0,0)を通る中央の軸線を引く
hline!([0], line=(:black, 1), label="")   # y=0の高さに黒い横線(x軸)を引く
vline!([0], line=(:black, 1), label="")   # x=0の位置に黒い縦線(y軸)を引く

03-03.png
 

その2. Framestyle属性を使った方法。

framestyleには複数の表示形式が用意されています。今回は2種類紹介します。
2-1. zerolines

plot([],[],   # データは渡さず枠組みだけ作る
    xlims=(-5, 5),   # x軸の表示範囲を-5から5に指定
    ylims=(-5, 5),   # y軸の表示範囲を-5から5に指定
    xticks=-5:1:5,   # x軸の目盛りを1刻みにする
    yticks=-5:1:5,   # y軸の目盛りを1刻みにする    
    grid=:both,   # 縦方向と横方向にグリッド線を表示
    gridalpha=0.3,   # グリッドの透明度
    gridstyle=:dash,   # グリッドを点線にする
    size=(500, 500),   # 画像のサイズを正方形に設定
    legend=false,   # 凡例をオフにする
    framestyle=:zerolines,   #【追加】framestyleを指定する。枠の外に目盛りをつけるzerolinesで設定
)

03-04.png

 
2-2. origin

plot([],[],   # データは渡さず枠組みだけ作る
    xlims=(-5, 5),   # x軸の表示範囲を-5から5に指定
    ylims=(-5, 5),   # y軸の表示範囲を-5から5に指定
    xticks=-5:1:5,   # x軸の目盛りを1刻みにする
    yticks=-5:1:5,   # y軸の目盛りを1刻みにする
    grid=:both,   # 縦方向と横方向にグリッド線を表示
    gridalpha=0.3,   # グリッドの透明度
    gridstyle=:dash,   # グリッドを点線にする
    size=(500, 500),   # 画像のサイズを正方形に設定
    legend=false,   # 凡例をオフにする
    framestyle=:origin,   #【追加】framestyleを指定する。座標軸に目盛りをつけるoriginで設定
)

03-05.png

framestyle=:zerolines は通常のグラフに原点を通る軸線を追加した表示です。
framestyle=:origin は原点を中心とした座標軸として表示され、目盛りも軸上に配置されます。

使用例

グラフ内に関数式を可視化させてみました。今回はxに配列を使っているため、配列の各要素に対して計算を行うために演算子の前へ .(ドット)を付けます。
annotateを使ってグラフ内の任意のx、yの位置に式を文字で表示させています。

text("y = 2x + 2", 10, :blue, :center) の場合
"y = 2x + 2" : 表示する文字式
10 : フォントサイズ
:blue : 文字の色
:center : 基準位置の揃え方(指定した座標 (-3.5, -2) を中心にして表示)
となります。

using Plots

# 1. グラフの土台(原点交差の軸)を作成
plot([],[],
    xlims=(-5, 5),   # x軸の表示範囲を-5から5に指定
    ylims=(-5, 5),   # y軸の表示範囲を-5から5に指定
    xticks=-5:1:5,   # x軸の目盛りを1刻みにする
    yticks=-5:1:5,   # y軸の目盛りを1刻みにする    
    grid=:both,   # 縦方向と横方向にグリッド線を表示
    gridalpha=0.3,   # グリッドの透明度
    gridstyle=:dash,   # グリッドを点線にする
    size=(500, 500),   # 画像のサイズを正方形に設定
    legend=false,   # 凡例をオフにする
    framestyle=:zerolines   # 中央交差の軸にする
)

# 2. 1次関数 y = 2x + 2 の式のグラフを追加
# xの範囲 [-5, 5] に対する y の値を計算
x = [-5, 5]
y = 2 .* x .+ 2

plot!(x, y,
    line=(:solid, 2, :blue),   # 青い線
    label=""
)

# 3. 2次関数 y = x^2 - 2 の式のグラフを追加
# xを-5から5まで細かく刻んで(100等分)なめらかな曲線にする
x = range(-5, 5, length=100)
y = x .^ 2 .- 2   # 配列の各要素を2乗して2を引く演算子

plot!(x, y,
    line=(:solid, 2, :red),   # 赤い線
    label=""
)

# 4. グラフ内への数式表示を追加
annotate!(-3.5, -2, text("y = 2x + 2", 10, :blue, :center))    # x-3.5、y-2の位置に青い字で式の表示(y = 2x + 2の式)
annotate!(3, 1, text("y = x^2 - 2", 10, :red, :center))   # x3、y1の位置に赤い字で式の表示(y = x^2 - 2の式)

03-06.png

framestyleはoriginの方が一般的な座標平面に近い表示になります。

ただし、今回のようにannotateで数式や説明文を追加する場合は、中央付近が混み合うためzerolinesの方が見やすい場合があります。

LaTexでの表示

LaTeX(数式を綺麗に表示するための表記法)を使うと、数学記号を見やすく表示できます。
import Pkg; Pkg.add("LaTeXStrings")でLaTeXのパッケージをインストールして、using LaTeXStringsを追加します。Colabのランタイムがリセットされた場合は、再度パッケージをインストールする必要があります。

annotate!(-3.5, -2, text(L"y = 2x + 2", 10, :blue, :center)) というように、表示する文字列の前に「L」を付けるだけで、LaTeX形式の数式として表示できます。分数や平方根など複雑な数式を書く場合に効果を発揮します。

import Pkg; Pkg.add("LaTeXStrings")   # LaTeXパッケージをインストーする

using Plots
using LaTeXStrings # LaTeX文字を使う宣言

# 1. グラフの土台(原点交差の軸)を作成
plot([],[],
    xlims=(-5, 5),   # x軸の表示範囲を-5から5に指定
    ylims=(-5, 5),   # y軸の表示範囲を-5から5に指定
    xticks=-5:1:5,   # x軸の目盛りを1刻みにする
    yticks=-5:1:5,   # y軸の目盛りを1刻みにする    
    grid=:both,      # 縦方向と横方向にグリッド線を表示
    gridalpha=0.3,   # グリッドの透明度
    gridstyle=:dash, # グリッドを点線にする
    size=(500, 500), # 画像のサイズを正方形に設定
    legend=false,    # 凡例をオフにする
    framestyle=:zerolines # 中央交差の軸にする
)

# 2. 関数を描画
x = range(-5, 5, length=100)
y = x .^ 2 .- 2
plot!(x, y, line=(:solid, 2, :blue))

# 3. annotate! で TeX(LaTeX)の数式テキストを追加
# 形式: annotate!(x座標, y座標, text(L"TeXで表示する式", フォントサイズ, 色, 基本位置))
annotate!(2.5, 3.5, text(L"y = x^2 - 2", 12, :blue, :left))

03-07.png

 
参照
Plots公式マニュアル。
https://docs.juliaplots.org/dev/

今回使ったFramestyleのページ。
https://docs.juliaplots.org/dev/gallery/gr/generated/gr-ref034/

annotateを使用した表示のページ。
https://docs.juliaplots.org/dev/gallery/gr/generated/gr-ref020/
 

次回は「簡単なアルゴリズムの可視化」をしていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?