Source code for source_release.prime_plot_data

import sys
import numpy as np
import h5py
import json
import matplotlib.pyplot as plt
import datetime
from dateutil    import parser
from prime_utils import runningAvg

VERBOSE=0

[docs] def main(setupfile): r""" Plot raw and filtered data for the region specified in the setupfile. Parameters ---------- setupfile: string json file (.json) including the region name. The "regionname.dat" should exist in the path accessible for this script """ #------------------------------------------------------- run_setup=json.load(open(setupfile)) if VERBOSE>0: print(run_setup) #------------------------------------------------------- # definitions fdata = run_setup["regioninfo"]["regionname"]+".dat" day0 = run_setup["regioninfo"]["day0"] ndays_average = run_setup["regioninfo"]["running_avg_obs"] #------------------------------------------------------- # get raw data rawdata = np.loadtxt(fdata,dtype=str) ndays_data = rawdata.shape[0] days_since_day0 = np.array([(parser.parse(rawdata[i,0])-parser.parse(day0)).days for i in range(rawdata.shape[0])]) new_cases = np.array([float(rawdata[i,1]) for i in range(ndays_data)]) datesData = np.array([parser.parse(rawdata[i,0]) for i in range(ndays_data)]) #------------------------------------------------------- # Filtered Data (with a running average) new_cases_filter = runningAvg(np.array([float(rawdata[i,1]) for i in range(ndays_data)]),ndays_average) #------------------------------------------------------- # plot fig = plt.figure(figsize=(6,6)) ax=fig.add_axes([0.18,0.26,0.75,0.7]) maxVal = np.max(new_cases) symtype=run_setup["ppopts"]["newcases"][0] ms=run_setup["ppopts"]["newcases"][1] pl1=ax.plot(datesData,new_cases,symtype,ms=ms) plt.plot(datesData,new_cases,'.k',label='Data') # TODO should change label depending on input deck options filter_label = str(ndays_average)+"-day running average" plt.plot(datesData,new_cases_filter,'s-r',label=filter_label) plt.xticks(rotation=45) x0=parser.parse(run_setup["ppopts"]["xylim_newcases"][0]) x1=parser.parse(run_setup["ppopts"]["xylim_newcases"][1]) x1=parser.parse(rawdata[-1,0])+datetime.timedelta(days=run_setup["ppopts"]["days_extra"]) ax.set_xlim([x0,x1]) y0 = 0.0 y1 = 1.1*maxVal ax.set_ylim([y0,y1]) xlbs=run_setup["ppopts"]["xylbl_newcases"][0] xlbf=run_setup["ppopts"]["xylbl_newcases"][1] ax.set_xlabel(xlbs,fontsize=xlbf) ylbs=run_setup["ppopts"]["xylbl_newcases"][2] ylbf=run_setup["ppopts"]["xylbl_newcases"][3] ax.set_ylabel(ylbs,fontsize=ylbf) for tick in ax.xaxis.get_major_ticks(): tick.label.set_fontsize(run_setup["ppopts"]["xyticklbl_newcases"][0]) for tick in ax.yaxis.get_major_ticks(): tick.label.set_fontsize(run_setup["ppopts"]["xyticklbl_newcases"][1]) plt.legend(fontsize=run_setup["ppopts"]["xyticklbl_newcases"][0]) figname=run_setup["regioninfo"]["regionname"] + "_case_data" plt.savefig(figname+"."+run_setup["ppopts"]["figtype"]) plt.close()
if __name__ == '__main__': main(sys.argv[1])