Python データ「x,y,z」から等高線図を作成する。

 本記事では、下図左のような3列のデータから、下図右のような等高線図を作成する雛形コードを載せました。

■本プログラム

import pandas as pd
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
import japanize_matplotlib
plt.rcParams['font.size'] = 14 # グラフの基本フォントサイズの設定


# CSVファイルからデータを読み込む
file_path = 'data.csv'
df = pd.read_csv(file_path)

# 等高線図のx,y,zにする列名を指定
x_name = 'x'
y_name = 'y'
z_name = 'z'

# タイトル名
my_title = f'{z_name}の等高線図'

# データx、y、zを抽出
x = df[x_name].values
y = df[y_name].values
z = df[z_name].values

# グリッドデータの作成
my_N = 100
xi, yi = np.meshgrid(np.linspace(min(x), max(x), my_N), np.linspace(min(y), max(y), my_N))
zi = griddata((x, y), z, (xi, yi), method='linear')

# グラフサイズ
plt.figure(figsize=(8, 6))  # 幅8インチ、高さ6インチ

# 等高線図のプロット
my_split = 10
contour = plt.contour(xi, yi, zi, levels=my_split, linewidths=0.5, colors='k')
contourf = plt.contourf(xi, yi, zi, levels=my_split, cmap='cool')  # カラーマップ

# 等高線上に数値をテキストで表示
plt.clabel(contour, inline=True, fontsize=12)  # fontsizeを変更

# 軸ラベルの設定
plt.xlabel(f'{x_name}軸', fontsize=16)
plt.ylabel(f'{y_name}軸', fontsize=16)

# タイトル
plt.title(my_title)

# カラーバーの追加
plt.colorbar(label=z_name)

# 薄い点線のグリッドを追加
plt.grid(linestyle='dotted', alpha=0.5, color='k')

# レイアウトを調整
plt.tight_layout()

# グラフの表示
plt.show()

# グラフを画像ファイルで保存
plt.savefig(f'{z_name}_contour.png')

  もしデータ点数が大量にあって、作図に非常に時間を要する場合、データ点数を間引いて線形補間により作図する雛形コードは次のリンク先を参照ください。

hk29.hatenablog.jp

以上

<広告>