Pythonで等高線をmatplotlibで描画してみよう!【初心者必見】

PythonではNumpyを使うことで等高線を描くことができます。

しかし初心者の中には


「等高線って何?」
「プログラミングで等高線ってどうやったら描けるの?」

などの悩みを抱えている方も多いのではないでしょうか?

そこで、この記事ではPythonを使って等高線を描く方法を、以下の内容で説明します!


【基礎】等高線とは何か
【基礎】等高線を描く方法
【発展】色々な等高線の指定方法

Pythonで等高線を描く方法についてわかりやすく説明していますので、ぜひ参考にしてください!

本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。

→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説

なお、その他のPythonの記事についてはこちらにまとめています。

目次

等高線とは?

プログラミングを行う前に、等高線とはそもそも何かという説明を簡単しましょう。

等高線とは高さを平面で表した線のことです。

山を例に出して考えてみましょう。山の高さを表すには立体的な空間が必要です。立体的な世界というのは、私たちの住んでいるような世界のことですね。

しかし紙に山の高さを表したいときには?

紙は平面なので、高さと山の形を同時に表すことはできません。

そこで等高線を使います。

等高線は実際の地形の高さを線でつないだものです。

左上は線の間隔が狭く、右下は線の間隔が広いですね。

等高線は高さを表しています。つまり左上は急な斜面になっていて、右下は緩やかな斜面になっていることを表しているのですね。

このように、等高線を使うことで簡単に平面上で標高を表すことができます。

Pythonで等高線を描いてみよう

では早速プログラミングで等高線を描いてみましょう。

データを用意する

等高線を描画するために、まずはデータを準備しましょう。

プログラムの最初にNumpyとMatplotlibを読み込むためのインポート文を記述します。

import numpy as np
import matplotlib.pyplot as plt

等高線を描くにはX軸とY軸、そして高さであるZ軸が必要です。

そこで今回はnumpy.arange関数を使って等差数列を作りましょう。

x = np.arange(-10, 10, 0.1) # x軸
y = np.arange(-10, 10, 0.1) # y軸

どんな値が変数x, yに入ったのか見てみましょう。

print('x:', x)
print('y:', y)

『実行結果』

x: [-1.00000000e+01 -9.90000000e+00 -9.80000000e+00 -9.70000000e+00
 -9.60000000e+00 -9.50000000e+00 -9.40000000e+00 -9.30000000e+00
 -9.20000000e+00 -9.10000000e+00 -9.00000000e+00 -8.90000000e+00

…省略

9.60000000e+00  9.70000000e+00  9.80000000e+00  9.90000000e+00]
y: [-1.00000000e+01 -9.90000000e+00 -9.80000000e+00 -9.70000000e+00
 -9.60000000e+00 -9.50000000e+00 -9.40000000e+00

…省略

結果を見ての通り、x, yはそれぞれ-10~10の範囲で0.1刻みの値が入ったndarrayであることがわかります。

変数の型はtype()で確認できますよ。

print(type(x))

『実行結果』

<class 'numpy.ndarray'>

データを整える

ここまでで、xとyのデータが準備できました。

しかし今のままではx, yは1次元のリストです。

等高線を描くためには2次元に変換させてあげなければなりません。

そこでmeshgrid関数を使います。

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

先程と同じように新しい変数X, Yの値を確認してみましょう!

print('X:', X)
print('Y:', Y)

『実行結果』

X: [[-10.   -9.9  -9.8 ...   9.7   9.8   9.9]
 [-10.   -9.9  -9.8 ...   9.7   9.8   9.9]

省略

見事、X, Yは2次元のリストであることがわかりますね!

次は変数Zを用意しましょう。

等高線はZに関して作られるため、この定義によって等高線の形が大きく変わります。

今回は次のように指定してみます。

Z = np.sqrt(X**2 + Y**2)

これは下向きの円柱のような形状です。

等高線を描く

等高線を描くにはplt.contour関数にX,Y,Zを与えてあげます。

cont = plt.contour(X, Y, Z)
plt.show()

ここまでをまとめると以下のようなプログラムになります。ただし変数の中身を確認していたprint文などは含めていません。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 10, 0.1) # x軸
y = np.arange(-10, 10, 0.1) # y軸

X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)

cont = plt.contour(X, Y, Z)
plt.show()

『実行結果』

等高線をもっと細かく描いてみよう

プログラムで等高線を描くことが出来ました。次はもっと細かく指定して等高線を描いてみましょう。

色を変更する

等高線の色を変更するには、meshgrid()の引数に色を指定してあげます。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 10, 0.1) # x軸
y = np.arange(-10, 10, 0.1) # y軸

X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)

cont = plt.contour(X,Y,Z,colors=['black'])
plt.show()

『実行結果』

黒一色の等高線が描けましたね!

ラベルを表示する

等高線は線だけではわかりにくいですね。

そこで各線に値を入れてあげることで、もっとわかりやすい等高線を描きましょう。

ラベルを付けるにはclabel()を使います。

ついでに今回はRGBの3色を指定してみました。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-10, 10, 0.1) # x軸
y = np.arange(-10, 10, 0.1) # y軸

X, Y = np.meshgrid(x, y)
Z = np.sqrt(X**2 + Y**2)

cont = plt.contour(X,Y,Z,colors=['r', 'g', 'b'])
cont.clabel(fmt='%1.1f', fontsize=14)

plt.xlabel('X', fontsize=14)
plt.ylabel('Y', fontsize=14)

plt.show()

『実行結果』

これで高さがわかりやすくなりましたね!

確かにZは中央になるほど高さが低くなる、下向きの円柱のような形であることがわかります。

まとめ

今回はPythonを使ってプログラミングで等高線を描く方法を解説しました。

プログラムで等高線が描ければ、手で描くよりも断然便利です。

ぜひマスターして等高線を描けるようになりましょう!

この記事を書いた人

ライターのアキヒロです。大学で機械学習・自然言語処理を学び、Pythonという言語を中心にコードを書いています。

目次