Matplotlib の軸とカラーバーのカスタマイズ

Beginner

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

はじめに

Matplotlib は、Python で静的、アニメーション、インタラクティブなビジュアライゼーションを作成できる Python ライブラリです。科学計算、データ分析、機械学習などの分野で広く使用されています。この実験では、Matplotlib を使って画像をプロットする方法と、軸とカラーバーの位置を操作する方法を学びます。

VM のヒント

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

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

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

ライブラリのインポート

このステップでは、この実験で使用する必要なライブラリをインポートします。サンプル画像を取得するために、matplotlib から matplotlib.pyplotcbook を使用します。

import matplotlib.pyplot as plt
from matplotlib import cbook

デモ画像を取得する

このステップでは、デモ画像とその範囲を取得する関数を定義します。サンプル画像を取得するために、cbook から get_sample_data() 関数を使用します。

def get_demo_image():
    z = cbook.get_sample_data("axes_grid/bivariate_normal.npy")  ## 15x15 array
    return z, (-3, 4, -4, 3)

シンプルな画像とカラーバー

このステップでは、シンプルな画像とそのカラーバーを作成します。画像を作成するために pyplot から imshow() 関数を、カラーバーを作成するために colorbar() 関数を使用します。

def demo_simple_image(ax):
    Z, extent = get_demo_image()

    im = ax.imshow(Z, extent=extent)
    cb = plt.colorbar(im)
    cb.ax.yaxis.set_tick_params(labelright=False)

描画時の位置指定による画像とカラーバー - 難しい方法

このステップでは、描画時の位置指定により画像とそのカラーバーを作成します。これは難しい方法で行います。mpl_toolkits.axes_grid1 から SubplotDivider を使用して、軸とカラーバー用の分割器を作成します。

def demo_locatable_axes_hard(fig):
    from mpl_toolkits.axes_grid1 import Size, SubplotDivider

    divider = SubplotDivider(fig, 2, 2, 2, aspect=True)

    ## 画像用の軸
    ax = fig.add_subplot(axes_locator=divider.new_locator(nx=0, ny=0))
    ## カラーバー用の軸
    ax_cb = fig.add_subplot(axes_locator=divider.new_locator(nx=2, ny=0))

    divider.set_horizontal([
        Size.AxesX(ax),  ## メイン軸
        Size.Fixed(0.05),  ## パディング,0.1 インチ
        Size.Fixed(0.2),  ## カラーバー, 0.3 インチ
    ])
    divider.set_vertical([Size.AxesY(ax)])

    Z, extent = get_demo_image()

    im = ax.imshow(Z, extent=extent)
    plt.colorbar(im, cax=ax_cb)
    ax_cb.yaxis.set_tick_params(labelright=False)

描画時の位置指定による画像とカラーバー - 簡単な方法

このステップでは、描画時の位置指定により画像とそのカラーバーを簡単な方法で作成します。mpl_toolkits.axes_grid1 から make_axes_locatable を使用して、軸とカラーバー用の分割器を作成します。

def demo_locatable_axes_easy(ax):
    from mpl_toolkits.axes_grid1 import make_axes_locatable

    divider = make_axes_locatable(ax)

    ax_cb = divider.append_axes("right", size="5%", pad=0.05)
    fig = ax.get_figure()
    fig.add_axes(ax_cb)

    Z, extent = get_demo_image()
    im = ax.imshow(Z, extent=extent)

    plt.colorbar(im, cax=ax_cb)
    ax_cb.yaxis.tick_right()
    ax_cb.yaxis.set_tick_params(labelright=False)

固定パディング付きで横並びの 2 つの画像

このステップでは、固定パディング付きで横並びの 2 つの画像を作成します。mpl_toolkits.axes_grid1 から make_axes_locatable を使用して、軸とカラーバー用の分割器を作成します。

def demo_images_side_by_side(ax):
    from mpl_toolkits.axes_grid1 import make_axes_locatable

    divider = make_axes_locatable(ax)

    Z, extent = get_demo_image()
    ax2 = divider.append_axes("right", size="100%", pad=0.05)
    fig1 = ax.get_figure()
    fig1.add_axes(ax2)

    ax.imshow(Z, extent=extent)
    ax2.imshow(Z, extent=extent)
    ax2.yaxis.set_tick_params(labelleft=False)

プロット

このステップでは、図を作成し、作成したい各画像用のサブプロットを追加します。

def demo():
    fig = plt.figure(figsize=(6, 6))

    ## プロット 1
    ## シンプルな画像とカラーバー
    ax = fig.add_subplot(2, 2, 1)
    demo_simple_image(ax)

    ## プロット 2
    ## 描画時の位置指定による画像とカラーバー -- 難しい方法
    demo_locatable_axes_hard(fig)

    ## プロット 3
    ## 描画時の位置指定による画像とカラーバー -- 簡単な方法
    ax = fig.add_subplot(2, 2, 3)
    demo_locatable_axes_easy(ax)

    ## プロット 4
    ## 固定パディング付きで横並びの 2 つの画像。
    ax = fig.add_subplot(2, 2, 4)
    demo_images_side_by_side(ax)

    plt.show()

まとめ

この実験では、Matplotlib を使って画像をプロットする方法と、軸とカラーバーの位置を操作する方法を学びました。画像とカラーバーを作成するさまざまな方法と、それらを図に配置する方法についても説明しました。この実験で得た知識を使えば、より複雑なビジュアライゼーションを作成し、自分のニーズに合わせて操作することができます。