Matplotlibで長方形の枠線を指定した幅で外側に描画する方法
Matplotlibで長方形の枠線(エッジ)を指定した幅で外側に描画したい場合、AnnotationBboxとAuxTransformBoxを組み合わせることで実現できます。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。
実装手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- 新しい図を作成するか、既存の図をアクティブにします。
add_subplot()を使って、図にax(軸オブジェクト)を追加します。- 枠線の太さを指定する変数
line_widthを初期化します。また、長方形の中心座標・幅・高さにはそれぞれxy、w、hという変数を使用します。 - アンカーポイント
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"(塗りつぶしなし)を指定し、edgecolorとlw(線幅)を設定することで、長方形を囲む外側の枠線として機能させることができます。
また、AuxTransformBox(ax.transData)を使用することで、長方形がデータ座標系に正しく配置され、グラフの拡大縮小にも追従します。
実行結果


このように、緑色の塗りつぶし長方形の周囲に、指定した幅(7pt)の赤い枠線が外側に描画されていることが確認できます。図形を強調表示したい場合などに活用できるテクニックです。
-
MatplotlibでRectangle(長方形)に色を設定する方法
Matplotlibで長方形(Rectangle)に色を設定するには、以下の手順に従います。手順figure() メソッドを使用して、新しい図(Figure)を作成するか、既存の図をアクティブにします。add_subplot() メソッドを使用して、サブプロット構成の一部として図に ~.axes.Axes を追加します。長方形は、アンカーポイント(基準座標)と幅・高さを指定することで定義できます。作成したRectangleパッチを add_patch() でプロットに追加します。xlim() および ylim() メソッドを使用して、x軸とy軸の表示範囲を設定します。図を表示するには、show
-
Matplotlibで円の中に長方形をプロットする方法
Matplotlibを使って円の中に長方形を描画したい場合、patchesモジュールが提供するRectangle()クラスとCircle()クラスを組み合わせることで簡単に実現できます。以下の手順に従ってください。手順figure()メソッドを使用して、新しい図を作成するか、既存の図をアクティブにします。add_subplot()メソッドで現在の図にサブプロット(軸)を追加します。Rectangle()クラスとCircle()クラスを使って、長方形と円のインスタンスを作成します。add_patch()メソッドで作成したパッチを軸に追加します。xlim()およびylim()メソッドを使用して、x