はじめに
データ可視化において、カラーマップは数値データを色で表現するために使用されます。ただし、データの分布が非線形である場合があり、これによりデータの詳細を識別するのが困難になることがあります。このような場合、カラーマップ正規化を使用して、カラーマップを非線形な方法でデータにマッピングすることができ、データをより正確に可視化するのに役立ちます。Matplotlib には、SymLogNormやAsinhNormなどのいくつかの正規化方法が用意されており、これらを使用してカラーマップを正規化することができます。この実験では、SymLogNormとAsinhNormを使用してカラーマップを非線形データにマッピングする方法を示します。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション終了後にフィードバックを提供してください。すぐに問題を解決いたします。
必要なライブラリをインポートする
このステップでは、Matplotlib、NumPy、および Matplotlib のカラーを含む必要なライブラリをインポートします。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.colors as colors
合成データを作成する
このステップでは、一つが負でもう一つが正の 2 つの山を持つ合成データセットを作成します。正の山の振幅は負の山の 8 倍です。その後、データを可視化するためにSymLogNormを適用します。
def rbf(x, y):
return 1.0 / (1 + 5 * ((x ** 2) + (y ** 2)))
N = 200
gain = 8
X, Y = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)]
Z1 = rbf(X + 0.5, Y + 0.5)
Z2 = rbf(X - 0.5, Y - 0.5)
Z = gain * Z1 - Z2
shadeopts = {'cmap': 'PRGn','shading': 'gouraud'}
colormap = 'PRGn'
lnrwidth = 0.5
SymLogNorm を適用する
このステップでは、合成データにSymLogNormを適用し、結果を可視化します。
fig, ax = plt.subplots(2, 1, sharex=True, sharey=True)
pcm = ax[0].pcolormesh(X, Y, Z,
norm=colors.SymLogNorm(linthresh=lnrwidth, linscale=1,
vmin=-gain, vmax=gain, base=10),
**shadeopts)
fig.colorbar(pcm, ax=ax[0], extend='both')
ax[0].text(-2.5, 1.5,'symlog')
pcm = ax[1].pcolormesh(X, Y, Z, vmin=-gain, vmax=gain,
**shadeopts)
fig.colorbar(pcm, ax=ax[1], extend='both')
ax[1].text(-2.5, 1.5, 'linear')
plt.show()
AsinhNorm を適用する
このステップでは、合成データにAsinhNormを適用し、結果を可視化します。
fig, ax = plt.subplots(2, 1, sharex=True, sharey=True)
pcm = ax[0].pcolormesh(X, Y, Z,
norm=colors.SymLogNorm(linthresh=lnrwidth, linscale=1,
vmin=-gain, vmax=gain, base=10),
**shadeopts)
fig.colorbar(pcm, ax=ax[0], extend='both')
ax[0].text(-2.5, 1.5,'symlog')
pcm = ax[1].pcolormesh(X, Y, Z,
norm=colors.AsinhNorm(linear_width=lnrwidth,
vmin=-gain, vmax=gain),
**shadeopts)
fig.colorbar(pcm, ax=ax[1], extend='both')
ax[1].text(-2.5, 1.5, 'asinh')
plt.show()
まとめ
この実験では、SymLogNormとAsinhNormを使用して、カラーマップを非線形データにマッピングする方法を学びました。これらの正規化方法を適用することで、データをより正確に可視化し、データの詳細をより容易に識別することができます。