Matplotlib を使った塗りつぶされたコントアウトプロット

Beginner

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

はじめに

このチュートリアルでは、Matplotlib ライブラリのcontourfメソッドを使って塗りつぶされたコントアウトプロットを作成する方法を学びます。自動的および明示的なレベルで塗りつぶされたコントアウトを作成する方法と、カラーマップと拡張設定を設定する方法について説明します。

VM のヒント

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

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

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

ライブラリのインポートとデータの作成

まず、必要なライブラリをインポートして、プロットするためのいくつかのデータを作成する必要があります。

import matplotlib.pyplot as plt
import numpy as np

## Create data
origin = 'lower'
delta = 0.025
x = y = np.arange(-3.0, 3.01, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

自動レベルで塗りつぶされたコントアウトの作成

次に、自動レベルで塗りつぶされたコントアウトプロットを作成します。cmapパラメータをplt.cm.boneに設定してカラーマップを指定するためにcontourfメソッドを使用します。また、contourメソッドを使ってコントアウト線を追加し、塗りつぶされたコントアウトに使用されるコントアウトレベルのサブセットを渡します。

## Create filled contour with automatic levels
fig, ax = plt.subplots()
CS = ax.contourf(X, Y, Z, 10, cmap=plt.cm.bone, origin=origin)
CS2 = ax.contour(CS, levels=CS.levels[::2], colors='r', origin=origin)

## Add title, axis labels, and colorbar
ax.set_title('Filled Contour with Automatic Levels')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
cbar = fig.colorbar(CS)
cbar.ax.set_ylabel('Z Label')
cbar.add_lines(CS2)

## Show plot
plt.show()

明示的なレベルで塗りつぶされたコントアウトの作成

次に、明示的なレベルで塗りつぶされたコントアウトプロットを作成します。levelsパラメータを値のリストに設定してコントアウトレベルを指定するためにcontourfメソッドを使用します。また、カラーマップを色のリストに設定し、extendパラメータを'both'に設定してレベルの範囲外の値を表示します。

## Create filled contour with explicit levels
fig, ax = plt.subplots()
levels = [-1.5, -1, -0.5, 0, 0.5, 1]
CS = ax.contourf(X, Y, Z, levels, colors=('r', 'g', 'b'),
                 origin=origin, extend='both')
CS2 = ax.contour(X, Y, Z, levels, colors=('k',),
                 linewidths=(3,), origin=origin)

## Add title, axis labels, and colorbar
ax.set_title('Filled Contour with Explicit Levels')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
cbar = fig.colorbar(CS)
cbar.ax.set_ylabel('Z Label')

## Show plot
plt.show()

カラーマップと拡張設定の設定

最後に、カラーマップと拡張設定を設定します。with_extremesメソッドを使って、レベルの範囲より下と上の値の色を設定します。また、4 つのサブプロットを作成して、4 つの可能なextend設定:'neither''both''min'、および'max'を表示します。

## Set colormap and extend settings
extends = ["neither", "both", "min", "max"]
cmap = plt.colormaps["winter"].with_extremes(under="magenta", over="yellow")

## Create subplots with different extend settings
fig, axs = plt.subplots(2, 2, layout="constrained")
for ax, extend in zip(axs.flat, extends):
    cs = ax.contourf(X, Y, Z, levels, cmap=cmap, extend=extend, origin=origin)
    fig.colorbar(cs, ax=ax, shrink=0.9)
    ax.set_title("extend = %s" % extend)
    ax.locator_params(nbins=4)

## Show plot
plt.show()

まとめ

このチュートリアルでは、Matplotlib ライブラリのcontourfメソッドを使って塗りつぶされたコントアウトプロットを作成する方法を学びました。自動的および明示的なレベルで塗りつぶされたコントアウトを作成する方法と、カラーマップと拡張設定を設定する方法について説明しました。これらのスキルを使えば、データに対して美しく情報豊かなコントアウトプロットを作成できます。