自前で補完するしかない気がします。
理由は、matplotlibにある曲線の補完は基本的にBezier Curveしかないと思うからです。つまり任意の初等関数を直接描画する方法はないと思います。
ただし本件の場合はBezier Curveを使うまでもなく、単に「tの区間を充分細かくしてλ(t)の値を計算した上で直線グラフとして描画」でもそこそこ満足できるものが描けると思います。計算機のディスプレイはたかだか1000画素程度しかないので。
以下はごく簡単に(元の図にある色々なあやは気にせず)コードを書いてみたものです。このアプローチでは実際の関数がどのようなものかはあまり問題でなく単に連続関数でありさえすればよいのでテキトーにそれらしい関数(f_atが返している関数)を用いました。
python
1import matplotlib.pyplot as plt
2import numpy as np
3
4λ = 1
5
6def f_at(ti, yi):
7 return lambda t: λ + (yi - λ) * np.exp(-(t - ti))
8
9ts = [0, 1, 3, 4, 7]
10ys = [0, 2, 3, 4, 0] # 最後の要素の値はグラフの結果には反映されない
11
12interpolation_step = 0.1
13
14for i in range(len(ts) - 1):
15 t0, t1 = ts[i:i + 2]
16 y0 = λ + ys[i]
17 lts = np.linspace(t0, t1, int((t1 - t0) / interpolation_step) + 2)
18 lys = f_at(t0, y0)(lts)
19 # 一つの連続区間のグラフをプロット
20 plt.plot(lts, lys, color='black')
21 if i > 0:
22 # 不連続点の破線をプロット
23 plt.plot((t0, t0), (pre_y, y0), dashes=(4, 4), color='black')
24 pre_y = lys[-1]
25
26plt.show()
不連続な点を破線で描画したり端点の円を描画する場合は
matplotlib.patches.Ellpise
matplotlib.patches.PathPatch
などを用いてもう少し凝ったことをしなくてはならないと思います。
訂正: 元の回答では不連続関数の座標値を全部連結して最後に1回だけプロットしてましたが、個々の連続部分を複数回プロットした方がより自然なやり方と思ったのでコードおよび結果の図を差し替えさせていただきました。