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

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

しかし初心者の中には


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

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

そこで、この記事では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を使ってプログラミングで等高線を描く方法を解説しました。

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

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

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

アキヒロ

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

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー