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

Matplotlibで2つの直線の交点を求め、補助線を引く方法

Matplotlibを使えば、2つの直線の交点を計算し、その点を通る水平線・垂直線(補助線)を簡単に描画できます。この記事では、傾きと切片から交点を求める数式の考え方と、実際にグラフへ可視化する手順を、コード例とともにわかりやすく解説します。

実装の手順

  • 図のサイズを設定し、サブプロット周りの余白を自動調整します。
  • 2つの直線を傾き(m1, m2)切片(c1, c2)で定義し、値を初期化します。
  • numpyを使ってx軸のデータポイントを生成します。
  • plot()メソッドで2本の直線を描画します。
  • 傾きと切片の値から、2直線の交点を計算します。
  • 点線スタイルで水平線と垂直線を描きます。
  • 交点(xi, yi)を黒い点でプロットします。
  • show()メソッドで図を表示します。

交点の求め方(数学的な背景)

2つの直線 y = m1·x + c1 と y = m2·x + c2 の交点は、連立方程式を解くことで求められます。具体的には次の式になります。

x座標:xi = (c1 − c2) / (m2 − m1)
y座標:yi = m1 · xi + c1

コード例

import matplotlib.pyplot as plt
import numpy as np

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

m1, c1 = 0.1, 2.0
m2, c2 = 2.0, -3.0

x = np.linspace(-10, 10, 500)

plt.plot(x, x * m1 + c1, 'red')
plt.plot(x, x * m2 + c2, 'green')

plt.xlim(-2, 8)
plt.ylim(-2, 8)

xi = (c1 - c2) / (m2 - m1)
yi = m1 * xi + c1

plt.axvline(x=xi, color='gray', linestyle='--')
plt.axhline(y=yi, color='gray', linestyle='--')

plt.scatter(xi, yi, color='black')

plt.show()

出力結果

Matplotlibで2つの直線の交点を求め、補助線を引く方法

ポイント解説

このコードでは、np.linspace(-10, 10, 500)によって−10から10までの範囲を500分割した滑らかなデータを作成しています。axvline()axhline()はそれぞれ垂直線・水平線を描くための便利なメソッドで、linestyle='--'を指定することで破線(ダッシュ線)として補助線を表示できます。最後にscatter()で交点を黒いマーカーとして強調することで、2直線がどこで交わっているかが一目でわかるグラフになります。

  1. Matplotlibでハッチの線幅を変更する方法

    Matplotlibでハッチ(網掛け)の線幅を変更したい場合は、rcParamsの「hatch.linewidth」パラメータを設定することで実現できます。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。実装の手順図のサイズを設定し、サブプロット間および周囲のパディングを調整します。NumPyを使用して、x および y = sin(x) のデータポイントを作成します。plt.rcParams[hatch.linewidth] を使って、ハッチの線幅を設定します。scatter() メソッドを使用し、「/」ハッチが付いた正方形マーカーで、設定した線幅を適用しながらxとyのデー

  2. Matplotlibで2つのヒストグラムのビン幅を揃える方法

    Matplotlibで2つのヒストグラムを比較する際、ビン幅が異なると正確な比較ができません。そこで、データセット全体から共通のビン境界を計算することで、両方のヒストグラムのビン幅を揃えることができます。手順ランダムデータ a と、正規分布に基づくデータ b を作成します。共通のビン幅を定義するための変数 bins を初期化します。hist() メソッドを使って、a と共通ビンでヒストグラムを描画します。hist() メソッドを使って、b と同じ共通ビンでヒストグラムを描画します。図を表示するには show() メソッドを使用します。サンプルコードimport numpy as np from