各種センサーの情報を扱っていると、情報の種類ごとのグラフ(チャート)を同じ時間軸で縦に積み上げて表示したくなります。
例えば、ロータリーエンコーダーの信号なら、エッジごとにパルス周期が測定され、その逆数からスピードを求めることができます。またパルス数カウントから移動距離が分かります。
Excelではこのようなパネルチャートを作ることはできませんが、matplotlibでは下記のように簡単できます。
import numpy as np
import matplotlib.pyplot as plt
def smpl_data_make(bs, pr, ph, va, len):
res = []
t = 0
for i in range(len):
sp = bs + (np.sin((2 * np.pi * t / pr) + ph) * va)
pp = 1 / sp
res.append([t, sp, pp, i])
t += pp
return list(zip(*res))
dat = [smpl_data_make(200, 0.1, i * (np.pi/3), 50, 21) for i in range(3)]
n_ax = 3
ttl = ['speed', 'interval', 'count']
fig, ax = plt.subplots(n_ax, 1, sharex='all', gridspec_kw={'hspace':0})
[[ax[c].plot(da[0], da[c+1], '-o') for da in dat] for c in range(n_ax)]
[a.set_ylim(bottom=0) for a in ax]
[a.set_title(t, x=-0.1, y=0.1, loc='right', rotation=90) for a,t in zip(ax, ttl)]
plt.show()
matplotlibでも記述方法がいくつかありますが、このようにsubplotsを使うのが一番少ない記述で済みそうです。
fig, ax = plt.subplots(n_ax, 1, sharex='all', gridspec_kw={'hspace':0})