Matplotlib で BboxImage を作成する

PythonPythonBeginner
今すぐ練習

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

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

はじめに

この実験では、Matplotlib で BboxImage を作成する方法を学びます。BboxImage は、バウンディングボックスに従って画像を配置するために使用できます。Text 付きの BboxImage を作成する方法と、各カラーマップ用の BboxImage を作成する方法を示します。

VM のヒント

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

Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

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

必要なライブラリをインポートする

このチュートリアルで必要なライブラリをインポートして始めましょう。matplotlib.pyplotnumpyBboxImageBbox、およびTransformedBboxが必要になります。

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.image import BboxImage
from matplotlib.transforms import Bbox, TransformedBbox

テキスト付きの BboxImage を作成する

まずは、テキスト付きの BboxImage を作成します。text() メソッドを使って text オブジェクトを作成し、ax1 オブジェクトに追加します。次に、add_artist() メソッドを使って BboxImage オブジェクトを作成します。text オブジェクトの get_window_extent メソッドを BboxImage コンストラクタに渡して、テキストのバウンディングボックスを取得します。また、BboxImage コンストラクタの data パラメータに形状 (1, 256) の 1 次元配列を渡して画像を作成します。

fig, (ax1, ax2) = plt.subplots(ncols=2)

txt = ax1.text(0.5, 0.5, "test", size=30, ha="center", color="w")
ax1.add_artist(
    BboxImage(txt.get_window_extent, data=np.arange(256).reshape((1, -1))))

各カラーマップ用の BboxImage を作成する

次に、各カラーマップ用の BboxImage を作成します。まず、plt.colormaps メソッドを使ってすべてのカラーマップのリストを作成します。そして、カラーマップのリストをループ処理する for ループを作成します。各カラーマップに対して、divmod() メソッドを使って ixiy の位置を計算します。次に、Bbox.from_bounds() メソッドを使って Bbox オブジェクトを作成します。Bbox.from_bounds() メソッドに ixiydx、および dy の値を渡してバウンディングボックスを作成します。そして、Bbox オブジェクトと ax2.transAxes オブジェクトを使って TransformedBbox オブジェクトを作成します。最後に、add_artist() メソッドを使って BboxImage オブジェクトを作成します。BboxImage コンストラクタに TransformedBbox オブジェクトを渡して、カラーマップ付きの画像を作成します。

cmap_names = sorted(m for m in plt.colormaps if not m.endswith("_r"))

ncol = 2
nrow = len(cmap_names) // ncol + 1

xpad_fraction = 0.3
dx = 1 / (ncol + xpad_fraction * (ncol - 1))

ypad_fraction = 0.3
dy = 1 / (nrow + ypad_fraction * (nrow - 1))

for i, cmap_name in enumerate(cmap_names):
    ix, iy = divmod(i, nrow)
    bbox0 = Bbox.from_bounds(ix*dx*(1+xpad_fraction),
                             1 - iy*dy*(1+ypad_fraction) - dy,
                             dx, dy)
    bbox = TransformedBbox(bbox0, ax2.transAxes)
    ax2.add_artist(
        BboxImage(bbox, cmap=cmap_name, data=np.arange(256).reshape((1, -1))))

グラフを表示する

最後に、show() メソッドを使ってグラフを表示します。

plt.show()

まとめ

この実験では、Matplotlib で BboxImage を作成する方法を学びました。テキスト付きの BboxImage と各カラーマップ用の BboxImage を作成しました。この知識を使って、異なるバウンディングボックスとカラーマップを持つ画像を作成できます。