1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
from .. import errplot
# from ..dream import stats as dream_stats
from ..dream import varplot as dream_varplot
from ..dream import views as dream_views
from .plot_view import PlotView
class UncertaintyView(PlotView):
title = "Uncertainty"
def update_parameters(self, *args, **kw):
pass
def plot(self):
if not self.plot_state:
return
history, stats = self.plot_state
with self.pylab_interface as pylab:
pylab.clf()
dream_varplot.plot_vars(history.draw(), stats)
pylab.draw()
def update(self, state):
self.plot_state = state
self.plot()
def fit_progress(self, problem, uncertainty_state, stats):
if problem != self.model:
return
self.update((uncertainty_state, stats))
class CorrelationView(PlotView):
"""
CorrelationView has a maximum number of correlations that it will show.
Change this by setting CorrelationView.MAX_CORR, either in the individual
view or in the class.
"""
MAX_CORR = 15
title = "Correlations"
def update_parameters(self, *args, **kw):
pass
def plot(self):
if not self.plot_state:
return
with self.pylab_interface as pylab:
pylab.clf()
if self.plot_state.Nvar > self.MAX_CORR:
return
history = self.plot_state
dream_views.plot_corrmatrix(history.draw())
pylab.draw()
def update(self, state):
self.plot_state = state
self.plot()
def fit_progress(self, problem, uncertainty_state):
if problem != self.model:
return
self.update(uncertainty_state)
class TraceView(PlotView):
title = "Parameter Trace"
def update_parameters(self, *args, **kw):
pass
def plot(self):
if not self.plot_state:
return
history = self.plot_state
with self.pylab_interface as pylab:
pylab.clf()
dream_views.plot_trace(history)
pylab.draw()
def update(self, state):
self.plot_state = state
self.plot()
def fit_progress(self, problem, uncertainty_state):
if problem != self.model:
return
self.plot_state = uncertainty_state
self.plot()
class ModelErrorView(PlotView):
title = "Model Uncertainty"
def update_parameters(self, *args, **kw):
pass
def plot(self):
if not self.plot_state:
return
with self.pylab_interface as pylab:
pylab.clf()
# Won't get here if plot_state is None
errplot.show_errors(self.plot_state)
pylab.draw()
def update(self, problem, state):
# TODO: Should happen in a separate process
self.plot_state = errplot.calc_errors_from_state(problem, state)
self.plot()
def fit_progress(self, problem, uncertainty_state):
if problem != self.model:
return
self.update(problem, uncertainty_state)
|