matplotlibで注釈(アノテーション)付きの円をプロットする方法
matplotlibでは、plot()メソッドとannotate()メソッドを組み合わせることで、特定のデータポイントを円で囲み、そこに注釈(矢印付きのテキスト)を追加したグラフを作成できます。
以下に、その具体的な手順を示します。
手順
- 図のサイズと余白の設定:
plt.rcParamsを使ってfigureサイズを指定し、サブプロット間・周囲のパディングを調整します。 - データポイントの作成: numpyを使ってデータ点を生成します。
- 注釈対象の座標取得: 円で囲んで注釈を付けたいポイントの座標を取り出します。
- 現在の軸を取得:
plt.gca()でカレントのAxesオブジェクトを取得します。 - データのプロット:
plot()メソッドでデータとデータポイントを描画します。 - 軸の範囲設定:
set_xlim()およびset_ylim()でX軸・Y軸の表示範囲を指定します。 - 円形マーカーの描画:
marker='o'とマーカー関連のプロパティ(mec、mfc、mewなど)を指定して、塗りなしの円でポイントを囲みます。 - 注釈の追加:
annotate()メソッドで矢印スタイルを設定し、円で囲んだマーカーにテキスト注釈を付けます。 - 図の表示:
show()メソッドでグラフを表示します。
コード例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.array([[5, 3, 4, 4, 6],
[1, 5, 3, 2, 2]])
point = data[:, 2]
ax = plt.gca()
ax.plot(data[0], data[1], 'o', ms=10, color='red')
ax.set_xlim([2, 8])
ax.set_ylim([0, 6])
radius = 15
# 対象ポイントを黄色い輪の円で囲む
ax.plot(point[0], point[1], 'o',
ms=radius * 2, mec='yellow', mfc='none', mew=2)
# 矢印付きの注釈を追加
ax.annotate('Circled Marker', xy=point, xytext=(60, 60),
textcoords='offset points',
color='green', size='large',
arrowprops=dict(
arrowstyle='simple,tail_width=0.3,head_width=0.8,head_length=0.8',
facecolor='b', shrinkB=radius * 1.2)
)
plt.show()
実行結果
上記のコードを実行すると、次のような出力が得られます。赤いデータポイントの中から1つが黄色い円で囲まれ、青い矢印とともに「Circled Marker」という緑色の注釈が表示されます。


ポイント解説
ms(markersize)はマーカーのサイズ、mecはマーカーの枠線の色、mfc='none'は塗りつぶしなし、mewは枠線の太さを意味します。xytext=(60, 60)とtextcoords='offset points'により、注釈テキストはターゲットポイントからオフセットされた位置に配置されます。arrowprops内のshrinkBを調整することで、矢印の先端が円に重ならないように制御できます。
-
【Matplotlib】アノテーション(テキスト)を回転させて線に一致させる方法
Matplotlibでグラフ上のアノテーション(テキスト)を回転させ、直線の傾きに一致させる方法を解説します。ポイントは、直線の傾きから回転角度(theta)を計算し、text()メソッドのrotation引数に渡すことです。 実装の手順 figure()メソッドを使用して、新しい図を作成するか、既存の図をアクティブにします。 add_subplot()メソッドを使用して、サブプロットとしてAxesを図に追加します。 直線の傾きmと切片cの変数を初期化します。 NumPyを使用して、xおよびyのデータ点を作成します。 テキストの回転角を求めるためにthetaを計算します。 plot()メソ
-
Matplotlibで漸近線・不連続点を含むグラフを正しく描画する方法
はじめにMatplotlibで y = 1/x のような関数をそのままプロットすると、x = 0 付近で値が発散し、グラフ上に不自然な縦線が表示されてしまうことがあります。これは数値計算では厳密な「無限大」を扱えず、0に極めて近い大きな値として計算されるためです。本記事では、numpyとMatplotlibを組み合わせて、漸近線(不連続点)を持つ関数を見やすく描画する手順を解説します。処理の手順numpyを使ってx・yのデータポイントを作成します。plt.axis(off) で軸の表示をオフにします。plot() メソッドでx・yのデータをもとに曲線を描画します。axhline() で水平方向