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:
parent
7cbac1f983
commit
5e6a503619
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -45,7 +45,7 @@ def test_filterpy_version():
|
||||
from distutils.version import LooseVersion
|
||||
|
||||
v = filterpy.__version__
|
||||
min_version = "1.2.1"
|
||||
min_version = "1.2.4"
|
||||
if LooseVersion(v) < LooseVersion(min_version):
|
||||
raise Exception("Minimum FilterPy version supported is {}.\n"
|
||||
"Please install a more recent version.\n"
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user