def plotter(key, sims, ax, label='', ylabel='', low_q=0.05, high_q=0.95, startday=None): color = cv.get_colors()[key.split('_')[1]] ys = [] for s in sims: ys.append(s.results[key].values) yarr = np.array(ys) best = pl.median(yarr, axis=0) low = pl.quantile(yarr, q=low_q, axis=0) high = pl.quantile(yarr, q=high_q, axis=0) sim = sims[0] tvec = np.arange(len(best)) fill_label = None pl.fill_between(tvec, low, high, facecolor=color, alpha=0.2, label=fill_label) pl.plot(tvec, best, c=color, label=label, lw=4, alpha=1.0) sc.setylim() datemarks = pl.array([sim.day('2020-03-01'),sim.day('2020-05-01'),sim.day('2020-07-01'), sim.day('2020-09-01')]) ax.set_xticks(datemarks) pl.ylabel(ylabel) return
def plotter(key, sims, ax, label='', ylabel='', low_q=0.05, high_q=0.95, subsample=2): which = key.split('_')[1] try: color = cv.get_colors()[which] except: color = [0.5,0.5,0.5] ys = [] for s in sims: ys.append(s.results[key].values) yarr = np.array(ys) best = pl.median(yarr, axis=0) low = pl.quantile(yarr, q=low_q, axis=0) high = pl.quantile(yarr, q=high_q, axis=0) tvec = np.arange(len(best)) # tempsim = cv.Sim(datafile='../UK_Covid_cases_january03.xlsx') # sim = sims[0] # if key in tempsim.data: # data_t = np.array((tempsim.data.index-sim['start_day'])/np.timedelta64(1,'D')) # inds = np.arange(0, len(data_t), subsample) # data = tempsim.data[key][inds] # pl.plot(data_t[inds], data, 'd', c=color, markersize=10, alpha=0.5, label='Data') fill_label = None end = None start = 2 if key == 'r_eff' else 0 pl.fill_between(tvec[start:end], low[start:end], high[start:end], facecolor=color, alpha=0.2, label=fill_label) pl.plot(tvec[start:end], best[start:end], c=color, label=label, lw=4, alpha=1.0) sc.setylim() datemarks = pl.array([sim.day('2020-03-01'),sim.day('2020-06-01'), sim.day('2020-09-01'),sim.day('2020-09-01'), sim.day('2020-12-01'),sim.day('2021-03-01'), sim.day('2021-05-01')]) ax.set_xticks(datemarks) pl.ylabel(ylabel) return
def plotter(key, sims, ax, ys=None, calib=False, label='', ylabel='', low_q=0.1, high_q=0.9): which = key.split('_')[1] try: color = cv.get_colors()[which] except: color = [0.5,0.5,0.5] if which == 'deaths': color = [0.5,0.0,0.0] if ys is None: ys = [] for s in sims: ys.append(s.results[key].values) yarr = np.array(ys) best = pl.median(yarr, axis=0) # Changed from median to mean for smoother plots low = pl.quantile(yarr, q=low_q, axis=0) high = pl.quantile(yarr, q=high_q, axis=0) sim = sims[0] # For having a sim to refer to # Formatting parameters plot_args = sc.mergedicts({'lw': 3, 'alpha': 0.8}) fill_args = sc.mergedicts({'alpha': 0.2}) tvec = np.arange(len(best)) if calib: if key == 'r_eff': end = -2 else: end = -1 else: end = None pl.fill_between(tvec[:end], low[:end], high[:end], facecolor=color, **fill_args) pl.plot(tvec[:end], best[:end], c=color, label=label, **plot_args) if key in sim.data: data_t = np.array((sim.data.index-sim['start_day'])/np.timedelta64(1,'D')) pl.plot(data_t, sim.data[key], 'o', c=color, markersize=10, label='Data') if calib: xlims = pl.xlim() pl.xlim([13, xlims[1]-1]) else: pl.xlim([0,94]) sc.setylim() xmin,xmax = ax.get_xlim() if calib: ax.set_xticks(pl.arange(xmin+2, xmax, 7)) else: ax.set_xticks(pl.arange(xmin+2, xmax, 7)) pl.ylabel(ylabel) pl.legend(loc='upper left') return
def plotter(key, sims, ax, ys=None, calib=False, label='', ylabel='', low_q=0.025, high_q=0.975, flabel=True, startday=None, subsample=2, chooseseed=None): which = key.split('_')[1] try: color = cv.get_colors()[which] except: color = [0.5, 0.5, 0.5] if which == 'diagnoses': color = [0.03137255, 0.37401, 0.63813918, 1.] elif which == '': color = [0.82400815, 0., 0., 1.] if ys is None: ys = [] for s in sims: ys.append(s.results[key].values) yarr = np.array(ys) if chooseseed is not None: best = sims[chooseseed].results[key].values else: best = pl.median(yarr, axis=0) low = pl.quantile(yarr, q=low_q, axis=0) high = pl.quantile(yarr, q=high_q, axis=0) sim = sims[0] # For having a sim to refer to tvec = np.arange(len(best)) if key in sim.data: data_t = np.array( (sim.data.index - sim['start_day']) / np.timedelta64(1, 'D')) inds = np.arange(0, len(data_t), subsample) pl.plot(data_t[inds], sim.data[key][inds], 'd', c=color, markersize=15, alpha=0.75, label='Data') start = None if startday is not None: start = sim.day(startday) end = sim.day(calibration_end) if flabel: if which == 'infections': fill_label = '95% projected interval' else: fill_label = '95% projected interval' else: fill_label = None pl.fill_between(tvec[startday:end], low[startday:end], high[startday:end], facecolor=color, alpha=0.2, label=fill_label) pl.plot(tvec[startday:end], best[startday:end], c=color, label=label, lw=4, alpha=1.0) # Print some stats if key == 'cum_infections': print( f'Estimated {which} on July 25: {best[sim.day("2020-07-25")]} (95%: {low[sim.day("2020-07-25")]}-{high[sim.day("2020-07-25")]})' ) print( f'Estimated {which} overall: {best[sim.day(calibration_end)]} (95%: {low[sim.day(calibration_end)]}-{high[sim.day(calibration_end)]})' ) elif key == 'n_infectious': peakday = sc.findnearest(best, max(best)) peakval = max(best) print( f'Estimated peak {which} on {sim.date(peakday)}: {peakval} (95%: {low[peakday]}-{high[peakday]})' ) print( f'Estimated {which} on last day: {best[sim.day(calibration_end)]} (95%: {low[sim.day(calibration_end)]}-{high[sim.day(calibration_end)]})' ) elif key == 'cum_diagnoses': print( f'Estimated {which} overall: {best[sim.day(calibration_end)]} (95%: {low[sim.day(calibration_end)]}-{high[sim.day(calibration_end)]})' ) sc.setylim() xmin, xmax = ax.get_xlim() if calib: ax.set_xticks(pl.arange(xmin + 2, xmax, 28)) else: ax.set_xticks(pl.arange(xmin + 2, xmax, 28)) pl.ylabel(ylabel) datemarks = pl.array([ sim.day('2020-07-01'), sim.day('2020-08-01'), sim.day('2020-09-01'), sim.day('2020-10-01') ]) * 1. ax.set_xticks(datemarks) return
def plotter(key, sims, ax, ys=None, calib=False, label='', ylabel='', low_q=0.025, high_q=0.975, flabel=True, subsample=2): ''' Plot a single time series with uncertainty ''' which = key.split('_')[1] try: color = cv.get_colors()[which] except: color = [0.5, 0.5, 0.5] if which == 'deaths': color = [0.5, 0.0, 0.0] if ys is None: ys = [] for i, s in enumerate(sims): if i < sims_cutoff: ys.append(s.results[key].values) yarr = np.array(ys) best = pl.median(yarr, axis=0) # Changed from median to mean for smoother plots low = pl.quantile(yarr, q=low_q, axis=0) high = pl.quantile(yarr, q=high_q, axis=0) sim = sims[0] # For having a sim to refer to tvec = np.arange(len(best)) data, data_t = None, None if key in sim.data: data_t = np.array( (sim.data.index - sim['start_day']) / np.timedelta64(1, 'D')) inds = np.arange(0, len(data_t), subsample) data = sim.data[key][inds] pl.plot(data_t[inds], data, 'd', c=color, markersize=10, alpha=0.5, label='Data') end = None if flabel: if which == 'infections': fill_label = '95% predic-\ntion interval' else: fill_label = '95% prediction\ninterval' else: fill_label = None # Trim the beginning for r_eff and actually plot start = 2 if key == 'r_eff' else 0 pl.fill_between(tvec[start:end], low[start:end], high[start:end], facecolor=color, alpha=0.2, label=fill_label) pl.plot(tvec[start:end], best[start:end], c=color, label=label, lw=4, alpha=1.0) sc.setylim() xmin, xmax = ax.get_xlim() ax.set_xticks(np.arange(xmin, xmax, day_stride)) pl.ylabel(ylabel) plotres[key] = sc.objdict( dict(tvec=tvec, best=best, low=low, high=high, data=data, data_t=data_t)) return
def plotter(key, sims, ax, ys=None, calib=False, label='', ylabel='', low_q=0.025, high_q=0.975, flabel=True, startday=None, subsample=2, chooseseed=None): which = key.split('_')[1] try: color = cv.get_colors()[which] except: color = [0.5, 0.5, 0.5] if which == 'diagnoses': color = [0.03137255, 0.37401, 0.63813918, 1.] elif which == '': color = [0.82400815, 0., 0., 1.] if ys is None: ys = [] for s in sims: ys.append(s.results[key].values) yarr = np.array(ys) if chooseseed is not None: best = sims[chooseseed].results[key].values else: best = pl.median(yarr, axis=0) low = pl.quantile(yarr, q=low_q, axis=0) high = pl.quantile(yarr, q=high_q, axis=0) sim = sims[0] # For having a sim to refer to tvec = np.arange(len(best)) if key in sim.data: data_t = np.array( (sim.data.index - sim['start_day']) / np.timedelta64(1, 'D')) inds = np.arange(0, len(data_t), subsample) pl.plot(data_t[inds], sim.data[key][inds], 'd', c=color, markersize=10, alpha=0.5, label='Data') start = None if startday is not None: start = sim.day(startday) end = sim.day('2021-03-31') if flabel: if which == 'infections': fill_label = '95% projected interval' else: fill_label = '95% projected interval' else: fill_label = None pl.fill_between(tvec[startday:end], low[startday:end], high[startday:end], facecolor=color, alpha=0.2, label=fill_label) pl.plot(tvec[startday:end], best[startday:end], c=color, label=label, lw=4, alpha=1.0) #for s in sims: # pl.plot(tvec[startday:end], s.results[key].values[startday:end], c=[0.4, 0.4, 0.4], label=label, lw=1, alpha=0.7) #sc.setylim() datemarks = pl.array([ sim.day('2020-07-01'), sim.day('2020-09-01'), sim.day('2020-11-01'), sim.day('2021-01-01') ]) * 1. ax.set_xticks(datemarks) pl.ylabel(ylabel) return