linewidth=0, zorder=102) m.drawmeridians(np.arange(west, east + 0.1, 5), labels=[0, 0, 0, 1], fontsize=10, linewidth=0, zorder=102) #-- box = "%f %f %f %f" % (west, east, north, south) os.system("./bin/txt_vector " + box + " " + pm.CaMa_dir() + " " + pm.mapname() + " > KGEAItmp1.txt") #map(vec_par,np.arange(1,10+1,1)) map(vec_par, np.arange(2, 10 + 1, 1)) #-- for point in np.arange(pnum): org = grdc.grdc_dis(staid[point], syear, eyear - 1) org = np.array(org) if np.sum(ma.masked_where(org != -99.9, org)) == 0.0: print("no obs", np.sum(ma.masked_where(org != -99.9, org))) continue KGEasm = KGE(np.mean(asm[:, :, point], axis=1), org) KGEopn = KGE(np.mean(opn[:, :, point], axis=1), org) if KGEopn == 1.00 or KGEopn == np.nan: print(KGEopn, staid[point], pname[point]) continue KGEAI = (KGEasm - KGEopn) / (1.0 - KGEopn + 1.0e-20) #KGEAI=KGEasm ix = xlist[point] iy = ylist[point] if rivermap[iy, ix] != 1.0: continue
def make_fig(point): plt.close() #labels=["GRDC","corrupted","assimilated"] labels=["GRDC","simulated","assimilated"] # #print org[:,point] #for i in np.arange(start,last): #print opn[i,:,point] #print asm[i,:,point] # plt.plot(np.arange(start,last),org[:,point],label="true",color=colors["true"],linewidth=0.7) # # for num in np.arange(0,pm.ens_mem()): # plt.plot(np.arange(start,last),opn[:,num,point],label="corrupted",color=colors["corrupted"],linewidth=0.3,alpha=0.5) # plt.plot(np.arange(start,last),asm[:,num,point],label="assimilated",color=colors["assimilated"],linewidth=0.3,alpha=0.5) # # plt.ylim(ymin=0) fig, ax1 = plt.subplots() org=grdc.grdc_dis(staid[point],syear,eyear-1) org=np.array(org) lines=[ax1.plot(np.arange(start,last),ma.masked_less(org,0.0),label="GRDC",color="#34495e",linewidth=3.0,zorder=101)[0]] #,marker = "o",markevery=swt[point]) # ax1.plot(np.arange(start,last),hgt[:,point],label="true",color="gray",linewidth=0.7,linestyle="--",zorder=101) # plt.plot(np.arange(start,last),org[:,point],label="true",color="black",linewidth=0.7) for num in np.arange(0,pm.ens_mem()): ax1.plot(np.arange(start,last),opn[:,num,point],label="corrupted",color="blue",linewidth=0.1,alpha=0.1,zorder=102) ax1.plot(np.arange(start,last),asm[:,num,point],label="assimilated",color="red",linewidth=0.1,alpha=0.1,zorder=103) # plt.plot(np.arange(start,last),opn[:,num,point],label="corrupted",color="blue",linewidth=0.3,alpha=0.5) # plt.plot(np.arange(start,last),asm[:,num,point],label="assimilated",color="red",linewidth=0.3,alpha=0.5) # draw mean of ensembles lines.append(ax1.plot(np.arange(start,last),np.mean(ma.masked_less(opn[:,:,point],0.0),axis=1),label="corrupted",color="#4dc7ec",linewidth=1.0,alpha=1,zorder=104)[0]) lines.append(ax1.plot(np.arange(start,last),np.mean(ma.masked_less(asm[:,:,point],0.0),axis=1),label="assimilated",color="#ff8021",linewidth=1.0,alpha=1,zorder=106)[0]) # plt.ylim(ymin=) # Make the y-axis label, ticks and tick labels match the line color. ax1.set_ylabel('discharge (m$^3$/s)', color='k') ax1.set_xlim(xmin=0,xmax=last+1) ax1.tick_params('y', colors='k') # scentific notaion ax1.ticklabel_format(style="sci",axis="y",scilimits=(0,0)) ax1.yaxis.major.formatter._useMathText=True # #xxlist=np.linspace(0,N,(eyear-syear)+1) #xlab=np.arange(syear,eyear+1,1) #xxlab=[calendar.month_name[i][:3] for i in range(1,13)] if eyear-syear > 8: dtt=2 dt=int(math.ceil(((eyear-syear)+1)/5.0)) elif eyear-syear > 10: dtt=5 dt=int(math.ceil(((eyear-syear)+1)/5.0)) else: dtt=1 dt=(eyear-syear)+1 xxlist=np.linspace(0,N,dt,endpoint=True) #xxlab=[calendar.month_name[i][:3] for i in range(1,13)] xxlab=np.arange(syear,eyear+1,dtt) ax1.set_xticks(xxlist) ax1.set_xticklabels(xxlab,fontsize=10) # Nash-Sutcllf calcuation NS1=NS(np.mean(asm[:,:,point],axis=1),org) NS2=NS(np.mean(opn[:,:,point],axis=1),org) KGE1=KGE(np.mean(asm[:,:,point],axis=1),org) KGE2=KGE(np.mean(opn[:,:,point],axis=1),org) COR1=correlation(np.mean(asm[:,:,point],axis=1),org) COR2=correlation(np.mean(opn[:,:,point],axis=1),org) RSE1=RMSE(np.mean(asm[:,:,point],axis=1),org) RSE2=RMSE(np.mean(opn[:,:,point],axis=1),org) #1-((np.sum((org[:ed,point]-org_Q)**2))/(np.sum((org_Q-np.mean(org_Q))**2))) #print point,NS1,NS2 Nash1="NS (assim):%4.2f"%(NS1) Nash2="NS (open):%4.2f"%(NS2) kgeh1="KGE(assim):%4.2f"%(KGE1) kgeh2="KGE(open):%4.2f"%(KGE2) corr1="$r$(assim):%4.2f"%(COR1) corr2="$r$(open):%4.2f"%(COR2) rmse1="RMSE: %4.2f"%(RSE1) rmse2="RMSE: %4.2f"%(RSE2) # # # ax1.text(0.02,0.95,Nash1,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.85,Nash2,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.42,0.95,kgeh1,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.42,0.85,kgeh2,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.75,corr1,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.55,corr2,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.95,Nash1,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.02,0.90,Nash2,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.02,0.80,kgeh1,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.02,0.75,kgeh2,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.42,0.95,corr1,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.42,0.90,corr2,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.42,0.80,rmse1,ha="left",va="center",transform=ax1.transAxes,fontsize=8) ax1.text(0.42,0.75,rmse2,ha="left",va="center",transform=ax1.transAxes,fontsize=8) # # twin axis # ax2 = ax1.twinx() # #aiv = stat.AI(asm[:,:,point],opn[:,:,point],org[:,point]) # #aivn= stat.AI_new(asm[:,:,point],opn[:,:,point],org[:,point]) # aivn,error = stat.AI_new(asm[:,:,point],opn[:,:,point],org[:,point]) # #print aivn # #-- # pBias,pB_c = stat.pBias(asm[:,:,point],opn[:,:,point],org[:,point]) # ai_mean =np.mean(ma.masked_less_equal(aivn,0.0))# np.nanmean(ma.masked_less_equal(aivn,0.0)) # # RMSE # RootMSE=stat.RMSE(asm[:,:,point],org[:,point]) # # rRMSE # rRootMSE=stat.rRMSE(asm[:,:,point],org[:,point]) # # NRMSE # NRootMSE=stat.NRMSE(asm[:,:,point],org[:,point]) # # VE # VolEff=stat.VE(asm[:,:,point],org[:,point]) # # NSE # NSEc,NSa,NSc=stat.NSE(asm[:,:,point],opn[:,:,point],org[:,point]) # # PDRI PTRI # PDRI,PTRI=stat.PRI(asm[:,:,point],opn[:,:,point],org[:,point]) # #--- # EnsSprd=stat.EnsSpr(asm[:,:,point],opn[:,:,point],org[:,point]) # EnsSpr_mean=np.mean(ma.masked_less_equal(EnsSprd,0.0)) # #--- # AssimQlt=stat.AQ(PDRI,PTRI,ai_mean,EnsSpr_mean) # #--- # mai = "meanAI:%1.2f"%(ai_mean) # pB = "pBIAS:%1.1f%%"%(pBias) # rms = "RMSE:%8.2f"%(RootMSE) # rrms= "rRMSE:%3.2f"%(rRootMSE) # nrms= "NRMSE:%3.2f"%(NRootMSE) # veff= "VE:%3.2f"%(VolEff) # nsec= "NSE:%3.2f"%(NSEc) # pdr = "PDRI:%3.2f"%(PDRI) # ptr = "PTRI:%3.2f"%(PTRI) # ESrd= "EnsSpr:%3.2f"%(EnsSpr_mean) # AssQ= "AQ:%3.2f"%(AssimQlt) # NSac= "NSEa:%3.2f, NSEc:%3.2f"%(NSa,NSc) # print mai , pB#, "pB_c", pB_c, "%" # #pB = pB + r'{1.1f}\%'.format(pBias) # ax1.text(0.02,0.95,mai,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.85,nsec,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.75,pB,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.65,rms,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.55,rrms,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.45,nrms,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.35,veff,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.25,pdr,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.15,ptr,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # #ax1.text(0.02,0.05,AssQ,ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.02,0.05,NSac,ha="left",va="center",transform=ax1.transAxes,fontsize=10) #--- # pBA_p=np.sum(ma.masked_greater((np.mean(asm[:,:,point],axis=1)-org[:,point]),0.0).filled(0.0)) # pBA_n=np.sum(ma.masked_less((np.mean(asm[:,:,point],axis=1)-org[:,point]),0.0).filled(0.0)) # #--- # pBC_p=np.sum(ma.masked_greater((np.mean(opn[:,:,point],axis=1)-org[:,point]),0.0).filled(0.0)) # pBC_n=np.sum(ma.masked_less((np.mean(opn[:,:,point],axis=1)-org[:,point]),0.0).filled(0.0)) # ax1.text(0.80,0.95,"pBa_p:%1.1f%%"%(pBA_p),ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.80,0.85,"pBa_n:%1.1f%%"%(pBA_n),ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.80,0.75,"pBc_p:%1.1f%%"%(pBC_p),ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.80,0.65,"pBc_n:%1.1f%%"%(pBC_n),ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.80,0.55,"pBa_p/pBa_n:%1.1f"%(abs(pBA_p/pBA_n+1.0e-20)),ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax1.text(0.80,0.45,"pBc_p/pBc_n:%1.1f"%(abs(pBC_p/pBC_n+1.0e-20)),ha="left",va="center",transform=ax1.transAxes,fontsize=10) # ax2.plot(np.arange(start,last),aiv,color="green",zorder=104,marker = "o",alpha=0.3, markevery=swt[point]) # ax2.plot(np.arange(start,last),ma.masked_less_equal(aivn,1.0e-20),color="green",zorder=104,marker = "o", alpha=0.5,linewidth=0.5,markevery=swt[point]) # ax2.plot(np.arange(start,last),ma.masked_where(error<=0.1,aivn),color=green,marker = "o",markeredgecolor =green, alpha=1,linewidth=0.5,markevery=swt[point],markersize=3,zorder=100)#,label="AI") # ax2.plot(np.arange(start,last),ma.masked_where(error>0.1,aivn),color=green2,marker = "o",markeredgecolor =green2, alpha=1,linewidth=0.5,markevery=swt[point],markersize=3,zorder=100)#,label="AI") # ax2.set_ylabel('AI', color='green') # ax2.tick_params('y', colors='green') # ax2.set_ylim(ymin=0.,ymax=1.) # ax2.set_xlim(xmin=0,xmax=last+1) # print swt[point] plt.legend(lines,labels,ncol=1,loc='upper right') #, bbox_to_anchor=(1.0, 1.0),transform=ax1.transAxes) station_loc_list=pname[point].split("/") station_name="-".join(station_loc_list) print ('save',river[point] , station_name) plt.savefig(assim_out+"/figures/disgraph/"+river[point]+"-"+station_name+".png",dpi=500) return 0