Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで長方形の枠線を指定した幅で外側に描画する方法

Matplotlibで長方形の枠線(エッジ)を指定した幅で外側に描画したい場合、AnnotationBboxAuxTransformBoxを組み合わせることで実現できます。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。

実装手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • 新しい図を作成するか、既存の図をアクティブにします。
  • add_subplot()を使って、図にax(軸オブジェクト)を追加します。
  • 枠線の太さを指定する変数line_widthを初期化します。また、長方形の中心座標・幅・高さにはそれぞれxywhという変数を使用します。
  • アンカーポイントxyと幅・高さを指定して、Rectangleインスタンスを作成します。
  • データ座標系に対応したAuxTransformBoxのインスタンスを取得します。
  • 手順5で作成したパッチrをアーティストとしてオフセットボックスに追加します。
  • OffsetBoxインスタンス用のコンテナを取得します。
  • 注釈ボックスabをコンテナボックスに追加します。bboxpropsで枠線の色や太さを指定することで、長方形の外側に指定幅のエッジが描画されます。
  • 最後にshow()メソッドを呼び出して図を表示します。

サンプルコード

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
from matplotlib.offsetbox import AnnotationBbox, AuxTransformBox

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()

ax = fig.add_subplot(111)
ax.plot([1, 6, 8, 6])

# 枠線の太さ
line_width = 7
# 長方形の中心座標・幅・高さ
xy, w, h = (1, 3), 2, 2
r = Rectangle(xy, w, h, fc='green', ec='orange', lw=3)

offsetbox = AuxTransformBox(ax.transData)
offsetbox.add_artist(r)

ab = AnnotationBbox(offsetbox, (xy[0] + w / 2, xy[1] + h / 2),
   boxcoords="data", pad=0.52, fontsize=line_width,
   bboxprops=dict(facecolor="none", edgecolor='r',
   lw=line_width))
ax.add_artist(ab)

plt.show()

コードのポイント

この手法の鍵となるのはAnnotationBboxです。注釈ボックスは通常テキストの背景枠として使われますが、bboxprops引数でfacecolor="none"(塗りつぶしなし)を指定し、edgecolorlw(線幅)を設定することで、長方形を囲む外側の枠線として機能させることができます。

また、AuxTransformBox(ax.transData)を使用することで、長方形がデータ座標系に正しく配置され、グラフの拡大縮小にも追従します。

実行結果

Matplotlibで長方形の枠線を指定した幅で外側に描画する方法Matplotlibで長方形の枠線を指定した幅で外側に描画する方法

このように、緑色の塗りつぶし長方形の周囲に、指定した幅(7pt)の赤い枠線が外側に描画されていることが確認できます。図形を強調表示したい場合などに活用できるテクニックです。

  1. MatplotlibでRectangle(長方形)に色を設定する方法

    Matplotlibで長方形(Rectangle)に色を設定するには、以下の手順に従います。手順figure() メソッドを使用して、新しい図(Figure)を作成するか、既存の図をアクティブにします。add_subplot() メソッドを使用して、サブプロット構成の一部として図に ~.axes.Axes を追加します。長方形は、アンカーポイント(基準座標)と幅・高さを指定することで定義できます。作成したRectangleパッチを add_patch() でプロットに追加します。xlim() および ylim() メソッドを使用して、x軸とy軸の表示範囲を設定します。図を表示するには、show

  2. Matplotlibで円の中に長方形をプロットする方法

    Matplotlibを使って円の中に長方形を描画したい場合、patchesモジュールが提供するRectangle()クラスとCircle()クラスを組み合わせることで簡単に実現できます。以下の手順に従ってください。手順figure()メソッドを使用して、新しい図を作成するか、既存の図をアクティブにします。add_subplot()メソッドで現在の図にサブプロット(軸)を追加します。Rectangle()クラスとCircle()クラスを使って、長方形と円のインスタンスを作成します。add_patch()メソッドで作成したパッチを軸に追加します。xlim()およびylim()メソッドを使用して、x