はじめに
Matplotlib は、Python における強力なデータ可視化ライブラリです。これは、幅広いグラフ、チャート、プロットを作成するためのさまざまなツールを提供します。Matplotlib の最も強力な機能の 1 つは、データをスケーリングする能力です。この実験では、正と負の両方の値を含む非常に広いダイナミックレンジをカバーする量をプロットすることができる変換である AsinhScale を紹介します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に直面した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
Matplotlib をインストールする
始める前に、Matplotlib がインストールされていることを確認してください。pip コマンドを使って以下のようにインストールできます。
pip install matplotlib
必要なライブラリをインポートする
AsinhScale を使用するには、Matplotlib ライブラリと numpy ライブラリをインポートする必要があります。numpy は、Python における強力な数値計算ライブラリであり、Matplotlib と併用されることがよくあります。
import matplotlib.pyplot as plt
import numpy as np
サンプルデータを作成する
AsinhScale を使ってデータをプロットする前に、いくつかのサンプルデータを作成する必要があります。numpy の linspace メソッドを使って簡単な折れ線グラフを作成します。
## Prepare sample values for variations on y=x graph:
x = np.linspace(-3, 6, 500)
サンプルの y=x グラフにおける「symlog」と「asinh」の挙動を比較する
サンプルの y=x グラフにおける「symlog」と「asinh」の挙動を比較します。同じグラフを 2 回プロットします。1 回は「symlog」で、もう 1 回は「asinh」でプロットします。
fig1 = plt.figure()
ax0, ax1 = fig1.subplots(1, 2, sharex=True)
ax0.plot(x, x)
ax0.set_yscale('symlog')
ax0.grid()
ax0.set_title('symlog')
ax1.plot(x, x)
ax1.set_yscale('asinh')
ax1.grid()
ax1.set_title('asinh')
異なるスケールパラメータ「linear_width」の「asinh」グラフを比較する
ここでは、異なるスケールパラメータ「linear_width」の「asinh」グラフを比較します。異なる「linear_width」値の 3 つのグラフをプロットします。
fig2 = plt.figure(layout='constrained')
axs = fig2.subplots(1, 3, sharex=True)
for ax, (a0, base) in zip(axs, ((0.2, 2), (1.0, 0), (5.0, 10))):
ax.set_title(f'linear_width={a0:.3g}')
ax.plot(x, x, label='y=x')
ax.plot(x, 10*x, label='y=10x')
ax.plot(x, 100*x, label='y=100x')
ax.set_yscale('asinh', linear_width=a0, base=base)
ax.grid()
ax.legend(loc='best', fontsize='small')
2 次元コーシー分布乱数における「symlog」と「asinh」のスケーリングを比較する
最後に、2 次元コーシー分布乱数における「symlog」と「asinh」のスケーリングを比較します。同じグラフを 2 回プロットします。1 回は「symlog」で、もう 1 回は「asinh」でプロットします。
fig3 = plt.figure()
ax = fig3.subplots(1, 1)
r = 3 * np.tan(np.random.uniform(-np.pi / 2.02, np.pi / 2.02,
size=(5000,)))
th = np.random.uniform(0, 2*np.pi, size=r.shape)
ax.scatter(r * np.cos(th), r * np.sin(th), s=4, alpha=0.5)
ax.set_xscale('asinh')
ax.set_yscale('symlog')
ax.set_xlabel('asinh')
ax.set_ylabel('symlog')
ax.set_title('2D Cauchy random deviates')
ax.set_xlim(-50, 50)
ax.set_ylim(-50, 50)
ax.grid()
まとめ
この実験では、Matplotlib における AsinhScale を紹介しました。これは、正と負の両方の値を含む非常に広いダイナミックレンジをカバーする量をプロットするための変換です。サンプルデータを作成する方法と、「symlog」と「asinh」でグラフをプロットする方法を学びました。また、異なるスケールパラメータの「asinh」グラフを比較する方法と、2 次元コーシー分布乱数における「symlog」と「asinh」のスケーリングを比較する方法も学びました。