はじめに
Matplotlib は、データ可視化に使用される Python ライブラリです。これにより、ユーザーはさまざまなチャート、プロット、グラフを作成できます。Matplotlib の主な機能の 1 つは、軸にスケール変換を適用する機能です。これにより、特に非常に大きい数や非常に小さい数を扱う場合に、データの提示により大きな柔軟性が得られます。この実験では、Matplotlib を使用して軸にさまざまなスケール変換を適用する方法を学びます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使用して練習します。
場合によっては、Jupyter Notebook が読み込み完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポートとデータの生成
まず、必要なライブラリをインポートして、プロットするためのデータを生成する必要があります。この例では、正規分布を使って y 軸用のデータを生成します。
import matplotlib.pyplot as plt
import numpy as np
## Fixing random state for reproducibility
np.random.seed(19680801)
## make up some data in the interval ]0, 1[
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))
線形スケールのプロットを作成する
まず調べるスケール変換のタイプは線形です。これは Matplotlib で使用される既定のスケールです。線形スケールのプロットを作成するには、set_yscale() メソッドを使用して文字列 'linear' を渡します。また、プロットにタイトルとグリッドを追加します。
## linear
plt.plot(x, y)
plt.yscale('linear')
plt.title('Linear Scale')
plt.grid(True)
対数スケールのプロットを作成する
次に調べるスケール変換のタイプは対数です。対数スケールのプロットを作成するには、set_yscale() メソッドを使用して文字列 'log' を渡します。また、プロットにタイトルとグリッドを追加します。
## log
plt.plot(x, y)
plt.yscale('log')
plt.title('Logarithmic Scale')
plt.grid(True)
対称的な対数スケールのプロットを作成する
調べる 3 番目のスケール変換のタイプは対称的な対数です。この種のスケールは、正と負の両方の値を含むデータを扱う際に便利です。対称的な対数スケールのプロットを作成するには、set_yscale() メソッドを使用して文字列 'symlog' を渡します。また、ゼロの周りの線形スケールにする値の範囲を指定するために、linthresh パラメータを 0.02 に設定します。また、プロットにタイトルとグリッドを追加します。
## symmetric log
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthresh=0.02)
plt.title('Symmetrical Logarithmic Scale')
plt.grid(True)
ロジットスケールのプロットを作成する
調べる 4 番目のスケール変換のタイプはロジットです。この種のスケールは、0 と 1 で境界付けられたデータを扱う際に便利です。ロジットスケールのプロットを作成するには、set_yscale() メソッドを使用して文字列 'logit' を渡します。また、プロットにタイトルとグリッドを追加します。
## logit
plt.plot(x, y)
plt.yscale('logit')
plt.title('Logit Scale')
plt.grid(True)
カスタムスケールのプロットを作成する
調べる最後のスケール変換のタイプはカスタムです。これにより、スケール変換用の独自の順方向および逆関数を定義できます。この例では、データの平方根を取得するカスタム関数を定義します。カスタムスケールのプロットを作成するには、set_yscale() メソッドを使用して文字列 'function' を渡します。また、forward() 関数と inverse() 関数を定義し、それらを functions パラメータの引数として渡します。また、プロットにタイトルとグリッドを追加します。
## Function x**(1/2)
def forward(x):
return x**(1/2)
def inverse(x):
return x**2
plt.plot(x, y)
plt.yscale('function', functions=(forward, inverse))
plt.title('Custom Scale')
plt.grid(True)
メルカトル変換スケールのプロットを作成する
特典として、メルカトル変換関数を使用してプロットも作成します。これは Matplotlib の組み込み関数ではないのですが、独自の順方向および逆関数を定義してメルカトル変換スケールのプロットを作成することができます。この例では、メルカトル変換用のforward()関数とinverse()関数を定義します。また、プロットにタイトルとグリッドを追加します。
## Function Mercator transform
def forward(a):
a = np.deg2rad(a)
return np.rad2deg(np.log(np.abs(np.tan(a) + 1.0 / np.cos(a))))
def inverse(a):
a = np.deg2rad(a)
return np.rad2deg(np.arctan(np.sinh(a)))
t = np.arange(0, 170.0, 0.1)
s = t / 2.
plt.plot(t, s, '-', lw=2)
plt.yscale('function', functions=(forward, inverse))
plt.title('Mercator Transform Scale')
plt.grid(True)
plt.xlim([0, 180])
まとめ
この実験では、Matplotlib を使って軸にさまざまなスケール変換を適用する方法を学びました。線形、対数、対称的対数、ロジット、カスタム、およびメルカトル変換スケール変換を調べました。これらのスケール変換を適用することで、非常に大きい数や非常に小さい数を含むデータ、および正と負の両方の値を含むデータをより良く視覚化することができます。