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

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

しかし初心者の中には

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

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

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

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

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

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

等高線とは?

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

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

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

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

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

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

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

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

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

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


【なかなかエラーが解決できない…そんな悩みを解決します!】

登録無料で始められるプログラミングスクール「侍テラコヤ」

・回答率100%のQ&A掲示板でエラーを解決!
現役エンジニアとのオンライン相談で悩みを解決!
・50種類以上の教材で複数言語を習得!

侍テラコヤについて詳しく見る

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

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

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

プログラミング学習中、
誰かへ相談したいことはありませんか?

SAMURAI TERAKOYA

プログラミングはエラーの連続。作業を進めるなかで誰かに教えてほしい場面は多いですよね。

そんな悩みを解決できるのが、侍テラコヤです。登録無料で始められて、現役エンジニアとオンラインで相談できるほか、回答率100%のQA掲示版でプログラミングに関する悩みを解決します!

気になる方はぜひ詳細をご覧ください。

→侍テラコヤの詳細をみる

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

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI TERAKOYA

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら
Close