LoginSignup
3
3

More than 3 years have passed since last update.

格子点を理解し、等高線で遊ぶ。

Last updated at Posted at 2019-12-18

こんにちは。
meshgridって混乱しませんか?
今日はmeshgridを中心に書いていきます。
そしてそれを利用した等高線を書く為のメソッドであるcontourで遊ぼうと思います。

meshgridとは

meshgrid格子点を作るために使われます。

格子点とは

座標平面上にある点で、x座標、y座標とも整数である点を格子点という。

スクリーンショット 2019-12-18 17.11.24.png
つまり、この画像の点全てのことですね。

さぁ、コードを書きます。

import numpy as np
x = [0, 1, 2, 3]
y = [0, 1, 2, 3]

X, Y = np.meshgrid(x, y)

XとYは以下のようになります。
スクリーンショット 2019-12-18 17.18.06.png
何これ〜〜〜〜〜〜〜〜~~?!?!?!?!?!?!?!と思う人も多いかもしれませんが、もう少し頑張ってください。
これが何を表しているのかを整理しましょう。
最初の座標平面とこの行列がどう関係しているか見ていきます。
下記の画像を見てください。
スクリーンショット 2019-12-18 17.26.02.png

どうですか?
少しはピンと来ましたか?
そう。XとYの行列の位置は平面上の座標と一致しているんです!(上下は転置されている)
つまり、行列の左上は座標では左下。
行列の右下に行くにつれて、座標では右上に行くのです。

この一致しているという事実を知っていれば、XとYの大きさは(len(y), len(x))となりますよね。
そしてlen(x) * len(y) = 格子点の数になります。
なぜかって?
まず紙に書いて、ゆっくり考えてみてください。

では大きさの違うx、yを考えてみようと思います。
スクリーンショット 2019-12-18 17.40.30.png

Xについて考えると、Xは必ず0か1しか要素として持ちません。
なぜなら、xという配列の中には0,1しかありませんからね。
そして0から1までを一つの棒と考えれば、y = 0, 100, 200に3本重ねれますよね。
これは、[0, 1]が3行必要ってことです。だからXの行列は3 * 2 = len(y) * len(x)なんですね。

Yも同じですよね。

結構まどろっこしい説明をしましたが、一言で言うと
行列の大きさは格子点の縦×横に等しいです
こうみるととても簡単だし、混乱も防げますよね。
それにしても美しい。

meshgridを利用して等高線を書く。

import numpy as np
import matplotlib.pyplot as plt

# z = 2(x + y)
def f(x, y):
    return 2 * (x + y)

x = [-1, 0, 1, 2, 3]
y = [-1, 0, 1, 2, 3]

X, Y = np.meshgrid(x, y)

fig, ax = plt.subplots()
cont = ax.contour(X, Y, f(X, Y), levels=[0, 2, 4]) # ここだけ説明。
cont.clabel(fmt='%1.1f', fontsize=14)
plt.show()

Figure_1.png
結果はこうなります。
実際 x = 2, y = -1 であれば、z = 2(2 - 1) = 2 * 1 = 2ですよね。

contourだけ説明しますね。
contour(X, Y, Z=f(X,Y), levels=[0, 2, 4])
まずcontourは等高線を求める為のツールです。
等高線とはx,yから導き出されるZの同じ値を結んだものです。
X,Yは格子点で、f(X,Y)でそれぞれの格子点でのZを求めています。
そのZにそって線を結んでいくんですね。それぞれの位置のZを知るために、格子点が必要となるわけです。
最後のlevelsは任意ですが、ここに指定されたものが線として表示されます。

まとめ

今日はmeshgridを中心に書きました。
そしてmeshgridを使う等高線を書く為のツールであるcontourで遊んでみました。
meshgridはいろんな所で使います。
しっかり理解しておくことはマストでしょう。
ありがとうございました。

参照文献

格子点とは?

3
3
1

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
3
3