Updated for FilterPy 1.2.4, moved code around
Moved code specific to one notebook to the *_internal.py file for that book. Updated to require FilterPy 1.2.4 due to a fix of a bad bug in the UKF RTS Smoother, and the change of likelihood from a function back to a property.
This commit is contained in:
@@ -23,6 +23,11 @@ import numpy as np
|
||||
|
||||
|
||||
def plot_track_and_residuals(dt, xs, z_xs, res):
|
||||
""" plots track and measurement on the left, and the residual
|
||||
of the filter on the right. Helps to visualize the performance of
|
||||
an adaptive filter.
|
||||
"""
|
||||
|
||||
assert np.isscalar(dt)
|
||||
t = np.arange(0, len(xs)*dt, dt)
|
||||
plt.subplot(121)
|
||||
@@ -44,6 +49,9 @@ def plot_track_and_residuals(dt, xs, z_xs, res):
|
||||
|
||||
|
||||
def plot_markov_chain():
|
||||
""" show a markov chain showing relative probability of an object
|
||||
turning"""
|
||||
|
||||
fig = plt.figure(figsize=(4,4), facecolor='w')
|
||||
ax = plt.axes((0, 0, 1, 1),
|
||||
xticks=[], yticks=[], frameon=False)
|
||||
@@ -103,7 +111,7 @@ def plot_markov_chain():
|
||||
|
||||
|
||||
def turning_target(N=600, turn_start=400):
|
||||
""" simulate a moving target blah"""
|
||||
""" simulate a moving target"""
|
||||
|
||||
#r = 1.
|
||||
dt = 1.
|
||||
|
||||
@@ -34,19 +34,24 @@ except:
|
||||
|
||||
|
||||
def equal_axis(sz=10):
|
||||
""" set size of axis in inches, using the same for each"""
|
||||
pylab.rcParams['figure.figsize'] = sz, sz
|
||||
plt.axis('equal')
|
||||
|
||||
|
||||
def reset_axis():
|
||||
""" reest axis size in inches to the default size for the book"""
|
||||
pylab.rcParams['figure.figsize'] = 8, 3
|
||||
|
||||
|
||||
def reset_figsize():
|
||||
""" reest axis size in inches to the default size for the book"""
|
||||
pylab.rcParams['figure.figsize'] = 8, 3
|
||||
|
||||
|
||||
def set_figsize(x=8, y=3):
|
||||
""" set the figure size of the plot to the specified size in inches"""
|
||||
|
||||
pylab.rcParams['figure.figsize'] = x, y
|
||||
|
||||
|
||||
@@ -139,169 +144,6 @@ def plot_errorbars(bars, xlims, ylims=(-1, 1)):
|
||||
plt.show()
|
||||
|
||||
|
||||
def plot_errorbar1():
|
||||
with figsize(y=2):
|
||||
plt.figure()
|
||||
plot_errorbars([(160, 8, 'A'), (170, 8, 'B')],
|
||||
xlims=(145, 185), ylims=(-1, 1))
|
||||
plt.show()
|
||||
|
||||
|
||||
def plot_errorbar2():
|
||||
with figsize(y=2):
|
||||
plt.figure()
|
||||
plot_errorbars([(160, 3, 'A'), (170, 9, 'B')],
|
||||
xlims=(145, 185), ylims=(-1, 1))
|
||||
|
||||
def plot_errorbar3():
|
||||
with figsize(y=2):
|
||||
plt.figure()
|
||||
plot_errorbars([(160, 1, 'A'), (170, 9, 'B')],
|
||||
xlims=(145, 185), ylims=(-1, 1))
|
||||
|
||||
|
||||
def plot_hypothesis1():
|
||||
with figsize(y=3.5):
|
||||
plt.figure()
|
||||
plt.errorbar([1, 2, 3], [170, 161, 169],
|
||||
xerr=0, yerr=10, fmt='bo', capthick=2, capsize=10)
|
||||
|
||||
plt.plot([1, 3], [180, 160], color='g', ls='--')
|
||||
plt.plot([1, 3], [170, 170], color='g', ls='--')
|
||||
plt.plot([1, 3], [160, 175], color='g', ls='--')
|
||||
plt.plot([1, 2, 3], [180, 152, 179], color='g', ls='--')
|
||||
plt.xlim(0,4)
|
||||
plt.ylim(150, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('lbs')
|
||||
plt.tight_layout()
|
||||
|
||||
|
||||
def plot_hypothesis2():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
plt.errorbar(range(1, 11), [169, 170, 169,171, 170, 171, 169, 170, 169, 170],
|
||||
xerr=0, yerr=6, fmt='bo', capthick=2, capsize=10)
|
||||
plt.plot([1, 10], [169, 170.5], color='g', ls='--')
|
||||
|
||||
plt.xlim(0, 11)
|
||||
plt.ylim(150, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('lbs')
|
||||
|
||||
|
||||
def plot_hypothesis3():
|
||||
weights = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6,
|
||||
169.6, 167.4, 166.4, 171.0, 171.2, 172.6]
|
||||
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
|
||||
plt.errorbar(range(1, 13), weights,
|
||||
xerr=0, yerr=6, fmt='o', capthick=2, capsize=10)
|
||||
|
||||
plt.xlim(0, 13)
|
||||
plt.ylim(145, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
|
||||
|
||||
def plot_hypothesis4():
|
||||
weights = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6,
|
||||
169.6, 167.4, 166.4, 171.0, 171.2, 172.6]
|
||||
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ave = np.sum(weights) / len(weights)
|
||||
plt.errorbar(range(1,13), weights, label='weights',
|
||||
yerr=6, fmt='o', capthick=2, capsize=10)
|
||||
plt.plot([1, 12], [ave,ave], c='r', label='hypothesis')
|
||||
plt.xlim(0, 13)
|
||||
plt.ylim(145, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
show_legend()
|
||||
|
||||
|
||||
def plot_hypothesis5():
|
||||
weights = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6,
|
||||
169.6, 167.4, 166.4, 171.0, 171.2, 172.6]
|
||||
|
||||
xs = range(1, len(weights)+1)
|
||||
line = np.poly1d(np.polyfit(xs, weights, 1))
|
||||
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
plt.errorbar(range(1, 13), weights, label='weights',
|
||||
yerr=5, fmt='o', capthick=2, capsize=10)
|
||||
plt.plot (xs, line(xs), c='r', label='hypothesis')
|
||||
plt.xlim(0, 13)
|
||||
plt.ylim(145, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
show_legend()
|
||||
|
||||
|
||||
def plot_estimate_chart_1():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ax = plt.axes()
|
||||
ax.annotate('', xy=[1,159], xytext=[0,158],
|
||||
arrowprops=dict(arrowstyle='->', ec='r',shrinkA=6, lw=3,shrinkB=5))
|
||||
plt.scatter ([0], [158], c='b')
|
||||
plt.scatter ([1], [159], c='r')
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
ax.xaxis.grid(True, which="major", linestyle='dotted')
|
||||
ax.yaxis.grid(True, which="major", linestyle='dotted')
|
||||
plt.tight_layout()
|
||||
|
||||
|
||||
def plot_estimate_chart_2():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ax = plt.axes()
|
||||
ax.annotate('', xy=[1,159], xytext=[0,158],
|
||||
arrowprops=dict(arrowstyle='->',
|
||||
ec='r', lw=3, shrinkA=6, shrinkB=5))
|
||||
plt.scatter ([0], [158.0], c='k',s=128)
|
||||
plt.scatter ([1], [164.2], c='b',s=128)
|
||||
plt.scatter ([1], [159], c='r', s=128)
|
||||
plt.text (1.0, 158.8, "prediction ($x_t)$", ha='center',va='top',fontsize=18,color='red')
|
||||
plt.text (1.0, 164.4, "measurement ($z_t$)",ha='center',va='bottom',fontsize=18,color='blue')
|
||||
plt.text (0.0, 159.8, "last estimate ($\hat{x}_{t-1}$)", ha='left', va='top',fontsize=18)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
ax.xaxis.grid(True, which="major", linestyle='dotted')
|
||||
ax.yaxis.grid(True, which="major", linestyle='dotted')
|
||||
plt.ylim(157, 164.5)
|
||||
|
||||
|
||||
def plot_estimate_chart_3():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ax = plt.axes()
|
||||
ax.annotate('', xy=[1,159], xytext=[0,158],
|
||||
arrowprops=dict(arrowstyle='->',
|
||||
ec='r', lw=3, shrinkA=6, shrinkB=5))
|
||||
|
||||
ax.annotate('', xy=[1,159], xytext=[1,164.2],
|
||||
arrowprops=dict(arrowstyle='-',
|
||||
ec='k', lw=3, shrinkA=8, shrinkB=8))
|
||||
|
||||
est_y = (158 + .4*(164.2-158))
|
||||
plt.scatter ([0,1], [158.0,est_y], c='k',s=128)
|
||||
plt.scatter ([1], [164.2], c='b',s=128)
|
||||
plt.scatter ([1], [159], c='r', s=128)
|
||||
plt.text (1.0, 158.8, "prediction ($x_t)$", ha='center',va='top',fontsize=18,color='red')
|
||||
plt.text (1.0, 164.4, "measurement ($z$)",ha='center',va='bottom',fontsize=18,color='blue')
|
||||
plt.text (0, 159.8, "last estimate ($\hat{x}_{t-1}$)", ha='left', va='top',fontsize=18)
|
||||
plt.text (0.95, est_y, "estimate ($\hat{x}_{t}$)", ha='right', va='center',fontsize=18)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
ax.xaxis.grid(True, which="major", linestyle='dotted')
|
||||
ax.yaxis.grid(True, which="major", linestyle='dotted')
|
||||
plt.ylim(157, 164.5)
|
||||
|
||||
|
||||
def predict_update_chart(box_bg = '#CCCCCC',
|
||||
|
||||
@@ -18,10 +18,155 @@ from __future__ import (absolute_import, division, print_function,
|
||||
|
||||
|
||||
import kf_book.book_plots as book_plots
|
||||
from kf_book.book_plots import figsize
|
||||
import numpy as np
|
||||
from matplotlib.patches import Circle, Rectangle, Polygon, Arrow, FancyArrow
|
||||
import matplotlib.pylab as plt
|
||||
|
||||
|
||||
def plot_hypothesis1():
|
||||
with figsize(y=3.5):
|
||||
plt.figure()
|
||||
plt.errorbar([1, 2, 3], [170, 161, 169],
|
||||
xerr=0, yerr=10, fmt='bo', capthick=2, capsize=10)
|
||||
|
||||
plt.plot([1, 3], [180, 160], color='g', ls='--')
|
||||
plt.plot([1, 3], [170, 170], color='g', ls='--')
|
||||
plt.plot([1, 3], [160, 175], color='g', ls='--')
|
||||
plt.plot([1, 2, 3], [180, 152, 179], color='g', ls='--')
|
||||
plt.xlim(0,4)
|
||||
plt.ylim(150, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('lbs')
|
||||
plt.tight_layout()
|
||||
|
||||
|
||||
def plot_hypothesis2():
|
||||
with book_plots.figsize(y=2.5):
|
||||
plt.figure()
|
||||
plt.errorbar(range(1, 11), [169, 170, 169,171, 170, 171, 169, 170, 169, 170],
|
||||
xerr=0, yerr=6, fmt='bo', capthick=2, capsize=10)
|
||||
plt.plot([1, 10], [169, 170.5], color='g', ls='--')
|
||||
|
||||
plt.xlim(0, 11)
|
||||
plt.ylim(150, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('lbs')
|
||||
|
||||
def plot_hypothesis3():
|
||||
weights = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6,
|
||||
169.6, 167.4, 166.4, 171.0, 171.2, 172.6]
|
||||
|
||||
with book_plots.figsize(y=2.5):
|
||||
plt.figure()
|
||||
|
||||
plt.errorbar(range(1, 13), weights,
|
||||
xerr=0, yerr=6, fmt='o', capthick=2, capsize=10)
|
||||
|
||||
plt.xlim(0, 13)
|
||||
plt.ylim(145, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
|
||||
|
||||
def plot_hypothesis4():
|
||||
weights = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6,
|
||||
169.6, 167.4, 166.4, 171.0, 171.2, 172.6]
|
||||
|
||||
with book_plots.figsize(y=2.5):
|
||||
plt.figure()
|
||||
ave = np.sum(weights) / len(weights)
|
||||
plt.errorbar(range(1,13), weights, label='weights',
|
||||
yerr=6, fmt='o', capthick=2, capsize=10)
|
||||
plt.plot([1, 12], [ave,ave], c='r', label='hypothesis')
|
||||
plt.xlim(0, 13)
|
||||
plt.ylim(145, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
book_plots.show_legend()
|
||||
|
||||
|
||||
def plot_hypothesis5():
|
||||
weights = [158.0, 164.2, 160.3, 159.9, 162.1, 164.6,
|
||||
169.6, 167.4, 166.4, 171.0, 171.2, 172.6]
|
||||
|
||||
xs = range(1, len(weights)+1)
|
||||
line = np.poly1d(np.polyfit(xs, weights, 1))
|
||||
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
plt.errorbar(range(1, 13), weights, label='weights',
|
||||
yerr=5, fmt='o', capthick=2, capsize=10)
|
||||
plt.plot (xs, line(xs), c='r', label='hypothesis')
|
||||
plt.xlim(0, 13)
|
||||
plt.ylim(145, 185)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
book_plots.show_legend()
|
||||
|
||||
|
||||
def plot_estimate_chart_1():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ax = plt.axes()
|
||||
ax.annotate('', xy=[1,159], xytext=[0,158],
|
||||
arrowprops=dict(arrowstyle='->', ec='r',shrinkA=6, lw=3,shrinkB=5))
|
||||
plt.scatter ([0], [158], c='b')
|
||||
plt.scatter ([1], [159], c='r')
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
ax.xaxis.grid(True, which="major", linestyle='dotted')
|
||||
ax.yaxis.grid(True, which="major", linestyle='dotted')
|
||||
plt.tight_layout()
|
||||
|
||||
|
||||
def plot_estimate_chart_2():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ax = plt.axes()
|
||||
ax.annotate('', xy=[1,159], xytext=[0,158],
|
||||
arrowprops=dict(arrowstyle='->',
|
||||
ec='r', lw=3, shrinkA=6, shrinkB=5))
|
||||
plt.scatter ([0], [158.0], c='k',s=128)
|
||||
plt.scatter ([1], [164.2], c='b',s=128)
|
||||
plt.scatter ([1], [159], c='r', s=128)
|
||||
plt.text (1.0, 158.8, "prediction ($x_t)$", ha='center',va='top',fontsize=18,color='red')
|
||||
plt.text (1.0, 164.4, "measurement ($z_t$)",ha='center',va='bottom',fontsize=18,color='blue')
|
||||
plt.text (0.0, 159.8, "last estimate ($\hat{x}_{t-1}$)", ha='left', va='top',fontsize=18)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
ax.xaxis.grid(True, which="major", linestyle='dotted')
|
||||
ax.yaxis.grid(True, which="major", linestyle='dotted')
|
||||
plt.ylim(157, 164.5)
|
||||
|
||||
|
||||
def plot_estimate_chart_3():
|
||||
with figsize(y=2.5):
|
||||
plt.figure()
|
||||
ax = plt.axes()
|
||||
ax.annotate('', xy=[1,159], xytext=[0,158],
|
||||
arrowprops=dict(arrowstyle='->',
|
||||
ec='r', lw=3, shrinkA=6, shrinkB=5))
|
||||
|
||||
ax.annotate('', xy=[1,159], xytext=[1,164.2],
|
||||
arrowprops=dict(arrowstyle='-',
|
||||
ec='k', lw=3, shrinkA=8, shrinkB=8))
|
||||
|
||||
est_y = (158 + .4*(164.2-158))
|
||||
plt.scatter ([0,1], [158.0,est_y], c='k',s=128)
|
||||
plt.scatter ([1], [164.2], c='b',s=128)
|
||||
plt.scatter ([1], [159], c='r', s=128)
|
||||
plt.text (1.0, 158.8, "prediction ($x_t)$", ha='center',va='top',fontsize=18,color='red')
|
||||
plt.text (1.0, 164.4, "measurement ($z$)",ha='center',va='bottom',fontsize=18,color='blue')
|
||||
plt.text (0, 159.8, "last estimate ($\hat{x}_{t-1}$)", ha='left', va='top',fontsize=18)
|
||||
plt.text (0.95, est_y, "estimate ($\hat{x}_{t}$)", ha='right', va='center',fontsize=18)
|
||||
plt.xlabel('day')
|
||||
plt.ylabel('weight (lbs)')
|
||||
ax.xaxis.grid(True, which="major", linestyle='dotted')
|
||||
ax.yaxis.grid(True, which="major", linestyle='dotted')
|
||||
plt.ylim(157, 164.5)
|
||||
|
||||
|
||||
def plot_gh_results(weights, estimates, predictions, time_step=0):
|
||||
|
||||
n = len(weights)
|
||||
@@ -75,4 +220,4 @@ def plot_g_h_results(measurements, filtered_data,
|
||||
time.sleep(0.5)
|
||||
|
||||
if __name__ == '__main__':
|
||||
plot_errorbar1()
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user