Source code for arsenal.viz.report
import matplotlib.pyplot as pl
import numpy as np
import pandas as pd
from collections import defaultdict
[docs]class Measurements:
def __init__(self, colors):
self.data = {name: defaultdict(list) for name in colors}
self.colors = colors
def __call__(self, name, x, samples):
samples = np.array(samples)
avg = samples.mean()
self.data[name]['xs'].append(x)
self.data[name]['avg'].append(avg)
if 0:
std = samples.std()
hi = avg+std; lo = avg-std
else:
hi = np.percentile(samples, 80)
lo = np.percentile(samples, 20)
self.data[name]['hi'].append(hi)
self.data[name]['lo'].append(lo)
#self.data[name]['samples'].append(samples)
[docs] def show(self, ax=None):
if ax is None: ax = pl.figure().add_subplot(111)
# plot all methods +/- error bars.
for name, data in self.data.items():
if not data: continue
df = pd.DataFrame(data)
pl.fill_between(df['xs'], df.hi, df.lo, alpha=0.1, color=self.colors[name])
pl.plot(df['xs'], df['avg'], lw=2, c=self.colors[name], alpha=0.5, label=name)
pl.legend(loc=4, ncol=len(self.data), borderaxespad=0.0, fontsize=10, frameon=0,
columnspacing=0.5, handletextpad=0.0)
[docs] def clear(self):
for d in self.data.values():
d.clear()