c32ca48542
The %matplotlib notebook back end does not account for things being drown outside of the plot, and they end up getting partially or fully cut off.
110 lines
2.9 KiB
Python
110 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""Copyright 2015 Roger R Labbe Jr.
|
|
|
|
|
|
Code supporting the book
|
|
|
|
Kalman and Bayesian Filters in Python
|
|
https://github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python
|
|
|
|
|
|
This is licensed under an MIT license. See the LICENSE.txt file
|
|
for more information.
|
|
"""
|
|
|
|
from __future__ import (absolute_import, division, print_function,
|
|
unicode_literals)
|
|
|
|
|
|
import code.book_plots as book_plots
|
|
import numpy as np
|
|
from matplotlib.patches import Circle, Rectangle, Polygon, Arrow, FancyArrow
|
|
import pylab as plt
|
|
import time
|
|
|
|
|
|
def plot_gh_results(weights, estimates, predictions, time_step=0):
|
|
|
|
n = len(weights)
|
|
if time_step > 0:
|
|
rng = range(1, n+1)
|
|
else:
|
|
rng = range(n, n+1)
|
|
|
|
plt.xlim([-1, n+1])
|
|
plt.ylim([156.0, 173])
|
|
act, = book_plots.plot_track([0, n], [160, 160+n], c='k')
|
|
plt.gcf().canvas.draw()
|
|
|
|
for i in rng:
|
|
xs = list(range(i+1))
|
|
|
|
#plt.cla()
|
|
|
|
pred, = book_plots.plot_track(xs[1:], predictions[:i], c='r', marker='v')
|
|
plt.xlim([-1, n+1])
|
|
plt.ylim([156.0, 173])
|
|
plt.gcf().canvas.draw()
|
|
time.sleep(time_step)
|
|
|
|
scale, = book_plots.plot_measurements(xs[1:], weights[:i], color='k', lines=False)
|
|
plt.xlim([-1, n+1])
|
|
plt.ylim([156.0, 173])
|
|
plt.gcf().canvas.draw()
|
|
time.sleep(time_step)
|
|
|
|
book_plots.plot_filter(xs[:i+1], estimates[:i+1], marker='o')
|
|
plt.xlim([-1, n+1])
|
|
plt.ylim([156.0, 173])
|
|
plt.gcf().canvas.draw()
|
|
time.sleep(time_step)
|
|
|
|
plt.legend([act, scale, pred], ['Actual Weight', 'Measurement', 'Predictions'], loc=4)
|
|
book_plots.set_labels(x='day', y='weight (lbs)')
|
|
|
|
|
|
|
|
|
|
def print_results(estimates, prediction, weight):
|
|
print('previous: {:.2f}, prediction: {:.2f} estimate {:.2f}'.format(
|
|
estimates[-2], prediction, weight))
|
|
|
|
|
|
|
|
|
|
def plot_g_h_results(measurements, filtered_data,
|
|
title='', z_label='Measurements',
|
|
**kwargs):
|
|
|
|
book_plots.plot_filter(filtered_data, **kwargs)
|
|
book_plots.plot_measurements(measurements, label=z_label)
|
|
plt.legend(loc=4)
|
|
plt.title(title)
|
|
plt.gca().set_xlim(left=0,right=len(measurements))
|
|
|
|
return
|
|
|
|
import time
|
|
if not interactive:
|
|
book_plots.plot_filter(filtered_data, **kwargs)
|
|
book_plots.plot_measurements(measurements, label=z_label)
|
|
book_plots.show_legend()
|
|
plt.title(title)
|
|
plt.gca().set_xlim(left=0,right=len(measurements))
|
|
else:
|
|
for i in range(2, len(measurements)):
|
|
book_plots.plot_filter(filtered_data, **kwargs)
|
|
book_plots.plot_measurements(measurements, label=z_label)
|
|
book_plots.show_legend()
|
|
plt.title(title)
|
|
plt.gca().set_xlim(left=0,right=len(measurements))
|
|
plt.gca().canvas.draw()
|
|
time.sleep(0.5)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import seaborn
|
|
plot_errorbar1()
|
|
#create_predict_update_chart() |