Matplotlibで漸近線・不連続点を含むグラフを正しく描画する方法
はじめに
Matplotlibで y = 1/x のような関数をそのままプロットすると、x = 0 付近で値が発散し、グラフ上に不自然な縦線が表示されてしまうことがあります。これは数値計算では厳密な「無限大」を扱えず、0に極めて近い大きな値として計算されるためです。
本記事では、numpyとMatplotlibを組み合わせて、漸近線(不連続点)を持つ関数を見やすく描画する手順を解説します。
処理の手順
- numpyを使ってx・yのデータポイントを作成します。
plt.axis('off')で軸の表示をオフにします。plot()メソッドでx・yのデータをもとに曲線を描画します。axhline()で水平方向の基準線(y = 0)を追加します。axvline()で垂直方向の基準線(x = 0)を追加します。legend()で曲線 y = 1/x の凡例を配置します。show()メソッドで図を表示します。
サンプルコード
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# -1から1までの範囲で100個の等間隔データポイントを生成
x = np.linspace(-1, 1, 100)
y = 1 / x
plt.axis('off')
plt.plot(x, y, label='y=1/x')
# 漸近線となる基準線を赤色で描画
plt.axhline(y=0, c='red')
plt.axvline(x=0, c='red')
plt.legend(loc='upper left')
plt.show()実行結果

赤色の水平線・垂直線がそれぞれx軸とy軸(漸近線)を表しており、曲線が原点付近で発散していく様子が視覚的に把握できます。
補足:マスク処理でより正確な不連続表現を行う
より厳密に不連続点を扱いたい場合は、numpyのマスク機能を活用してx = 0付近のデータを除外する方法も有効です。
y = np.ma.masked_where(np.abs(x) < 1e-6, 1 / x)
このようにマスクを適用すると、不連続点で曲線がつながらなくなり、漸近線の挙動がより自然に表現されます。用途に応じて、基準線の追加とマスク処理を組み合わせると、数学的に正確で読み取りやすいグラフになります。
-
Matplotlibでカラーバー付き2D行列をPythonでプロットする方法
Pythonでカラーバー付きの2D行列をプロットするには、numpyを使って2次元配列(行列)を作成し、そのデータをimshow()メソッドに渡すのが最も簡単な方法です。手順numpyを使用して data2D という2次元配列を作成します。imshow() メソッドを使い、データを画像として(2次元の正規ラスタ上に)表示します。colorbar() メソッドに imshow() が返す ScalarMappable インスタンスを渡し、カラーバーを作成します。これにより、色と数値の対応関係がひと目でわかるようになります。図を表示するには、show() メソッドを使用します。コード例import
-
matplotlib.pyplotでテーブルのフォントサイズを変更する方法
matplotlibで作成したテーブルのフォントサイズを変更するには、set_fontsize()メソッドを使用します。ポイントは、その前にauto_set_font_size(False)を呼び出して自動調整機能を無効化することです。これにより、指定したフォントサイズが確実に反映されます。 手順 図(figure)とサブプロットを作成します(nrows=1、ncols=1)。 numpyを使ってランダムなデータを生成します。 列名(columns)を定義します。 軸をtightに設定し、表示をoffにします。 フォントサイズを変更するための変数を初期化します。 auto_set_font_