Matplotlibで等高線を描く方法

Matplotlib

pythonのMatplotlibで等高線を描いてみたい方、この記事ではシンプルな等高線から、等高線に値を入れたり、等高線レベルに分けて色を設定する方法を紹介します.

 スポンサーリンク

スポンサーリンク

等高線データの作成

・始める前に本記事では以下のモジュールが必要です

import module

import numpy as np
import matplotlib.pyplot as plt

メッシュグリッド(格子点)の作成

・x,yそれぞれにnp.linspace関数を使って等間隔で0~3の区間で値を20個作成します.

x、y配列作成

x = np.linspace(0, 3, 20)
y = np.linspace(0, 3, 20)

・x,yの配列からnp.meshgrid関数でグリッドを作成します.

グリッド作成

x, y = np.meshgrid(x, y) #x,y

・サンプルコードでグリッド作成までを確認します.

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
x = np.linspace(0, 3, 20) #等間隔で値を0~3まで20個作成
y = np.linspace(0, 3, 20) #等間隔で値を0~3まで20個作成
x, y = np.meshgrid(x, y)  #x,yからメッシュグリッドを作成
scat=plt.scatter(x,y)
plt.show()

x,yの配列から,np.meshgridでグリッドを作成することができました.

グリッドの高さ設定

・グリッド座標x,yから,高さを配列zを作成します.
z方向の高さの式を以下のようにしました.
z=sin(x)+cos(y)+1

Z方向の高さ

def fz(x, y): #高さデータzを作る関数fzを定義
return np.sin(x)+np.cos(y)+1
z = fz(x, y) #関数fzを呼び出し高さデータzを作成

等高線を作成

・等高線の作成はAxes.contour([x,y],z,レベル,引数1,引数2…)より行います.

Axes.contour()の引数

引数効果
x,y配列,x,yは同じ形状を持つ2Dである必要があります.
z配列 ,等高線が描画される高さ
レベル配列など等高線/領域の数を決定する.
colors等高線の色
CMAPカラーマップの選択
vmin,vmax等高線の最小値,最大値

等高線の値を表示

・等高線の値を表示するにはAxes.clabel()より行います.

・Axes.clabel()の引数

引数効果
fontsize文字サイズ
colors等高線の色
fmtラベルのフォーマット デフォルト: ‘%1.3f’

ax.clabel(fmt=’%1.1f’, fontsize=16) #等高線の値を表示

・等高線を表示さてみましょう

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 3, 20) #等間隔でデータを0から20まで20個作成
y = np.linspace(0, 3, 20) #等間隔でデータを0から20まで20個作成
x, y = np.meshgrid(x, y)  #xとyからメッシュグリッドを作成
def fz(x, y):       #高さデータzを作る関数fzを定義
    return np.sin(x)+np.cos(y)+1  
z = fz(x, y)        #関数fzを呼び出し高さデータzを作成.

ax = plt.contour(x,y,z,colors='black')    #等高線表示
ax.clabel(fmt='%1.1f', fontsize=16)        #等高線の値を表示
plt.show()

等高線表示できました.

等高線レベルに応じて色を塗る

・等高線レベルに応じて色を塗るにはAxes.contourf([x,y],z,レベル,引数1,引数2…)より行います.

Axes,conturf()の引数

引数効果
x,y配列,x,yは同じ形状を持つ2Dである必要があります.
z配列 等高線が描画される高さ
レベル配列など等高線/領域の数を決定する.
colorsレベルの色
cmapカラーマップの選択
vmin,vmaxカラースケーリングの最小値、最大値

ax = plt.contourf(x,y,z,cmap=’rainbow’) #カラーマップに従って等高線に色を塗る

・カラーバーの表示

カーラーバーを表示するにはcolorbar()より行います.
ax = plt.colorbar(label=”contour level”)

・等高線レベルに応じて色を塗り、カラーバーを表示します.

import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 3, 20) #等間隔でデータを0から20まで20個作成
y = np.linspace(0, 3, 20) #等間隔でデータを0から20まで20個作成
x, y = np.meshgrid(x, y)  #xとyからメッシュグリッドを作成
def fz(x, y):       #高さデータzを作る関数fzを定義
    return np.sin(x)+np.cos(y)+1  
z = fz(x, y)        #関数fzを呼び出し高さデータzを作成.

ax = plt.contour(x,y,z,colors='black')    #等高線表示
ax.clabel(fmt='%1.1f', fontsize=16)       #等高線の値を表示
ax = plt.contourf(x,y,z,cmap='rainbow')   #等高線レベルに応じて色を塗る
ax = plt.colorbar(label="contour level")  #カラーバー表示
plt.show()

等高線の高さによって色が変わりました.

等高線のレベルを調整

・等高線のレベルを変えるにはAxes.contor()Axes.contorf()に引数として配列または関数を渡します.

等高線のレベルを0~3の範囲で20分割するように np.linespace(0,3.2,21)とします.

・先程作成したサンプルプログラムを下記に変えて実行します.

ax = plt.contour(x,y,z,np.linspace(0,3.2,21),colors='black')
ax.clabel(fmt='%1.1f', fontsize=16)
ax = plt.contourf(x,y,z,np.linspace(0,3.2,21),cmap='rainbow')
ax = plt.colorbar(label="contour level")

等高線が狙い通り表示されました.

トップページへ戻る

 

コメント

タイトルとURLをコピーしました