Matplotlib によるデータ可視化技術

Beginner

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

はじめに

Matplotlib は、Python における強力なデータ可視化ライブラリです。これは、幅広いグラフ、チャート、プロットを作成するためのさまざまなツールを提供します。Matplotlib の最も強力な機能の 1 つは、データをスケーリングする能力です。この実験では、正と負の両方の値を含む非常に広いダイナミックレンジをカバーする量をプロットすることができる変換である AsinhScale を紹介します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に直面した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 中級 レベルの実験の完了率は 80%です。学習者から 100% の好評価を得ています。

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」のスケーリングを比較する方法も学びました。