Matplotlib カラーマップの正規化

PythonPythonBeginner
今すぐ練習

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

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

はじめに

データ可視化において、カラーマップは数値データを色で表現するために使用されます。ただし、データの分布が非線形である場合があり、これによりデータの詳細を識別するのが困難になることがあります。このような場合、カラーマップ正規化を使用して、カラーマップを非線形な方法でデータにマッピングすることができ、データをより正確に可視化するのに役立ちます。Matplotlib には、SymLogNormAsinhNormなどのいくつかの正規化方法が用意されており、これらを使用してカラーマップを正規化することができます。この実験では、SymLogNormAsinhNormを使用してカラーマップを非線形データにマッピングする方法を示します。

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()

まとめ

この実験では、SymLogNormAsinhNormを使用して、カラーマップを非線形データにマッピングする方法を学びました。これらの正規化方法を適用することで、データをより正確に可視化し、データの詳細をより容易に識別することができます。