pointer()
pointer() は点をプロットする Axes.scatter() に、テキスト添付機能を付け加えた関数です。同じことを Axes.text() や Axes.annotate() などでやろうとすると面倒なので、1つの関数にまとめておきました。
# PYTHON_POINTER_01
# ラベル付きポインタ関数
def pointer(axes, x, y, text, angle = 45,
textsize = 12, textcolor = "black", pad = 0.2,
psize = None, pcolor = None, marker = None,
cmap = None, norm = None, alpha = None,
linewidths = None, edgecolors = None):
# 点をプロット
axes.scatter(x, y, s = psize, c = pcolor,
marker = marker, cmap = cmap, norm = norm,
alpha = alpha, linewidths = linewidths,
edgecolors = edgecolors)
# 数学関数モジュールをインポート
import math
# テキストの配置角度をラジアンに変換
text_angle = angle * math.pi / 180
# テキストの位置を計算
loc_x = x + pad * math.cos(text_angle)
loc_y = y + pad * math.sin(text_angle)
# テキストを配置
axes.text(loc_x, loc_y, text,
fontsize = textsize, color = textcolor)
引数 pad で点とテキストの距離を、angle でテキストの配置角度を指定します(テキストの位置とはテキストボックスの左下の位置です)。配置角度は x 軸から反時計回りに測った角度です。angle = 0 は点の右横、angle = 90 は点の真上を意味します。
pointer() を使っていくつかの点を打ってみます。直交座標を設定するために、当サイトのコードライブラリにある coordinate() を用意しておいてください。
# PYTHON_POINTER_02
import matplotlib.pyplot as plt
# FigureとAxes
fig = plt.figure(figsize = (5, 5))
ax = fig.add_subplot(111)
# 座標を準備
coordinate(ax, [-2, 5], [-2, 5])
# 座標(3,3)に赤い点を打ち、右上(45°)に"P1"を表示
pointer(ax, 3, 3, "P1", pcolor = "red",
textsize = 16, pad = 0.3)
# 座標(2,1)に青い点を打ち、上(90°)に"P2"を表示
pointer(ax, 2, 1, "P2", pcolor = "blue",
angle = 90, textsize = 16, pad = 0.3)
# 座標(-1,3)に緑色のサイズ200の点を打ち、
# その下(270°)に"P3"をダークオレンジで表示
pointer(ax, -1, 3, "P3",
pcolor = "green", psize = 100,
angle = 270, textsize = 16,
textcolor = "darkorange", pad = 0.6)
コメントを書く