Matplotlib 軸変換技術

PythonPythonBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

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を使って軸にさまざまなスケール変換を適用する方法を学びました。線形、対数、対称的対数、ロジット、カスタム、およびメルカトル変換スケール変換を調べました。これらのスケール変換を適用することで、非常に大きい数や非常に小さい数を含むデータ、および正と負の両方の値を含むデータをより良く視覚化することができます。