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

【Python】matplotlibで2点を結ぶ直線の代わりに滑らかな曲線を描く方法

はじめに

データ可視化において、2つの点を結ぶ際に単純な直線ではなく、自然な曲線で描きたいケースは少なくありません。matplotlibでは、数式を活用することで、2点を結ぶ滑らかな曲線を簡単に描画できます。

本記事では、双曲線関数(cosh)を利用して、2点を結ぶ美しい曲線を描く手順を解説します。

実装の手順

matplotlibで直線の代わりに2点を結ぶ曲線を描くには、以下の手順に従います。

  1. 図のサイズを設定し、サブプロット間および周囲の余白を調整します。
  2. 数式を用いて曲線を生成する draw_curve() メソッドを定義します。
  3. 点1(p1)と点2(p2)のデータポイントをプロットします。
  4. draw_curve() メソッドから返された x・y のデータポイントをプロットします。
  5. show() メソッドを使用して図を表示します。

曲線の仕組み

draw_curve() メソッドでは、双曲線余弦関数(cosh)を用いて曲線を計算しています。まず2点の座標から係数 a と b を導出し、次の式でカテナリー曲線(懸垂線)に似た滑らかな曲線を生成します。

y = a × cosh(x) + b

cosh関数を使うことで、2点を必ず通過しながら、なめらかで自然な湾曲を持つ曲線が得られます。

コード例

import matplotlib.pyplot as plt
import numpy as np

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

def draw_curve(p1, p2):
   a = (p2[1] - p1[1]) / (np.cosh(p2[0]) - np.cosh(p1[0]))
   b = p1[1] - a * np.cosh(p1[0])
   x = np.linspace(p1[0], p2[0], 100)
   y = a * np.cosh(x) + b
   return x, y

p1 = [0, 1]
p2 = [1, 2]
x, y = draw_curve(p1, p2)
plt.plot(p1[0], p1[1], 'o')
plt.plot(p2[0], p2[1], 'o')
plt.plot(x, y)
plt.show()

出力結果

上記のコードを実行すると、2つの点(マーカー「o」)と、それらを結ぶ滑らかな曲線が描画されたグラフが出力されます。

【Python】matplotlibで2点を結ぶ直線の代わりに滑らかな曲線を描く方法【Python】matplotlibで2点を結ぶ直線の代わりに滑らかな曲線を描く方法

まとめ

このように、numpyのcosh関数と組み合わせることで、matplotlibでも直線の代わりに数学的に定義された滑らかな曲線を描くことができます。np.linspace()でx座標を細かく分割し、対応するy座標を計算してプロットするのがポイントです。点の座標を変更すれば、任意の2点間の曲線に応用できます。

  1. 【Python】Matplotlibでグラフの線にラベルを付ける方法

    Matplotlibでグラフの線にラベルを付けるには、plot()メソッドの引数にlabelを指定します。ラベルを付けた線は、legend()メソッドで凡例として図に表示できます。手順図のサイズを設定し、サブプロット間および周囲の余白を調整します。plot()メソッドを使用し、label="line1" を指定して1本目の線をプロットします。同様に、label="line2" を指定して2本目の線をプロットします。図に凡例を配置するには、legend()メソッドを使用します。図を画面に表示するには、show()メソッドを使用します。コード例from ma

  2. Matplotlibのpyplot.plot()を使ってパラメトリック曲線を描画する方法

    Pythonの可視化ライブラリMatplotlibでは、pyplot.plot()メソッドを利用することで、パラメータ方程式で定義された曲線(パラメトリック曲線)を簡単に描画できます。この記事では、極座標形式のパラメトリック曲線を2次元平面上にプロットする手順を、サンプルコードとともに解説します。パラメトリック曲線を描画する手順図のサイズと余白の設定: plt.rcParamsを使用して、図のサイズやサブプロット間・周囲のパディングを調整します。サンプル数Nの初期化: 曲線を構成するデータ点の数を表す変数Nを定義します。値が大きいほど滑らかな曲線になります。NumPyによるデータ点の生成: パ