Matplotlibで製図用の距離矢印(寸法線)を描画する方法
Matplotlibで技術図面のような距離矢印(寸法線)を描画するには、annotate()メソッドに矢印のスタイルを指定するarrowpropsを組み合わせて使うのが便利です。この記事では、2本の水平線の間の距離を両矢印とラベルで示す具体的な手順を解説します。
実装の手順
figure.figsizeで図のサイズを設定し、figure.autolayoutを有効にしてサブプロット周辺の余白を自動調整します。
axhline()メソッドを使い、y=3.5 の位置に軸全体にわたる水平線を引きます。
同様にaxhline()メソッドで、y=2.5 の位置にもう1本の水平線を引きます。
annotate()メソッドで2点間をつなぐ両矢印(arrowstyle '<->')を描画し、その直後にもう一度annotate()メソッドを呼び出して、2本の水平線の間に距離ラベル「d=1」を表示します。
最後にshow()メソッドを実行して図を表示します。
コード例
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
plt.axhline(3.5)
plt.axhline(2.5)
plt.annotate(
'', xy=(0.5, 3.5), xycoords='data',
xytext=(0.5, 2.5), textcoords='data',
arrowprops={'arrowstyle': '<->'})
plt.annotate(
'$\it{d=1}$', xy=(0.501, 3.0), xycoords='data',
xytext=(0.5, 3.5), textcoords='offset points')
plt.show()実行結果
上記のコードを実行すると、y=3.5 と y=2.5 の2本の水平線の間に垂直な両矢印が描かれ、その中央付近にイタリック体の距離ラベル「d=1」が表示されます。これにより、CADの製図のように要素間の寸法を視覚的に示すグラフを作成できます。
ポイントの解説
xycoords='data':矢印の始点・終点をデータ座標系で指定します。今回のように実際の値(y=3.5、y=2.5)に基づいて矢印を引きたい場合に適しています。
textcoords='offset points':ラベルの位置を基準点からのオフセット(ポイント単位)で指定します。これにより、矢印から少し離れた見やすい位置にテキストを配置できます。
arrowstyle '<->':両端に矢頭を持つ双方向矢印を描画します。片側だけの矢印にしたい場合は '->' や '<-' を指定してください。
$\it{d=1}$:MatplotlibはTeX形式の数式表記に対応しているため、イタリック体の数式風ラベルを簡単に表示できます。
この手法は、グラフ上の2つの要素間の距離や差分を強調したい場合に幅広く活用でき、arrowpropsの色(color)や線幅(linewidth)を追加指定することで、より見やすい図にカスタマイズすることも可能です。
-
Matplotlibでサンプルデータから確率密度関数をプロットする方法
概要サンプルデータから確率密度関数をプロットするには、NumPyでx軸・y軸のデータポイントを生成し、Matplotlibのplot()メソッドで描画するのが一般的です。ここでは、ガウス関数(正規分布に似た釣り鐘型の曲線)を例に、その基本的な手順をわかりやすく解説します。手順numpyを使ってxとpのデータポイントを作成します。plot()メソッドでxとpのデータポイントをプロットします。xlim()メソッドでX軸の表示範囲を設定します。図を表示するにはshow()メソッドを使用します。コード例import numpy as np from matplotlib import pyplot a
-
Matplotlibを使ってPythonで複数の図を横並びに描画する方法
Matplotlibで複数の図を並べて描画する手順 PythonのMatplotlibを使えば、subplot()メソッドを活用することで、複数の図を1つのウィンドウ内に横一列に並べて簡単に表示できます。ここでは、同じランダムデータを4種類のカラーマップで可視化する例を紹介します。 具体的には、以下の手順で実装します。 numpyを使ってランダムなデータ(5×5の行列)を作成します。 plt.subplot(nrows, ncols, index)で現在の図にサブプロットを追加します。今回は「nrows=1、ncols=4」のレイアウトで、index=1から順に配置していきます。 imsho