【matplotlib】 軌跡を時間で色分けしてプロット
久々の投稿。
タイトル、どんなにしたらいいのかわからなかった
状況設定
ひとまず今回の状況設定。
空間を運動する粒子の軌跡を描くが、時間の情報も載せたい。
例えば、ボールを初速度 で地面からの角度で投げた時、軌跡は
このボールの軌跡を二次元プロットした時、下のようになる
これだと、時間の情報が無いので、○秒後にどこにいるか、とかはわかりにくい。 そこで、色に時間の情報を持たせることはできないか?というのが今回のお話。
ちなみにさっきのプロットのソースはこんなん
import numpy as np import matplotlib.pylab as plt t=np.linspace(0,1,1000) v=4.9*np.sqrt(2.) g=9.8 y=v*t/np.sqrt(2.) - .5*g*t*t x=v*t/np.sqrt(2.) plt.figure(figsize=(5,4)) plt.plot(x,y) plt.xlabel(r'$x$',fontsize=22) plt.ylabel(r'$y$',fontsize=22)
結論
from matplotlib import cm plt.scatter(x,y, c=t,#色と時系列の対応 cmap=cm.jet,#カラーマップの種類 marker='.',lw=0) #line width(lw)は0にしないと多分よく見えないと思う ax=plt.colorbar()#カラーマップの凡例 ax.set_label('time [sec]')#カラーバーのラベルネーム
こんな感じになる。
解説
カギは、
- plt.scatterを使う
- lw=0を設定
- c=hogeで色と対応付ける配列を与える
- cmapでカラーマップの種類
こんなところか?
あと、scatterなので点でしかプロットできないのが難点。誰か通常のline plotでもでける方法を教えて下さい。
ちなみに、c=tをc=yにすると、こんな感じ。y座標が色に対応する
おまけ
放物線だと有り難みがわからんので、ブラウン運動でやってみよう
ここ から引用
こんな感じ。ソースは省略。 色が時間に対応しているので、どこからどこに移動したかがわかる だが、どのスポットからどのスポットに移動したかはわからぬ・・・line plotで色を変えられれば最高なのに。