def all_models_cdfs_pdfs2(cdf, pdf, bin_c, args, nsinks=64): """bins -- linear spaced 10^val not val""" sns.set_style("whitegrid") # ,{"axes.facecolor": ".97"}) sns.set_palette("colorblind") # kwargs laba = dict(fontweight="bold", fontsize=dFS) # str_beta map addtext = {} addtext["hydro_both"] = r"$\mathbf{ \beta_0 = \infty \, (1+2) }$" addtext["b100"] = r"$\mathbf{ \beta_0 = 100 }$" addtext["b10"] = r"$\mathbf{ \beta_0 = 10 }$" addtext["b1"] = r"$\mathbf{ \beta_0 = 1 }$" addtext["b1e-1"] = r"$\mathbf{ \beta_0 = 0.1 }$" addtext["b1e-2"] = r"$\mathbf{ \beta_0 = 0.01 }$" # plot fig, axes = plt.subplots(2, 1, sharex=True) ax = axes.flatten() plt.subplots_adjust(hspace=0.1) colors = sns.color_palette() # color blind colors b/c set_palette() called above cnt = 0 for mod in cdf.keys(): if mod == "bInf" or mod == "bInfsd3": continue ax[1].plot(bin_c[mod] / mdotB(), cdf[mod], c=colors[cnt], label=addtext[mod]) ax[0].plot(bin_c[mod] / mdotB(), pdf[mod], c=colors[cnt], label=addtext[mod]) cnt += 1 # ax[1].legend(loc=4,fontsize=FS,frameon=True,fancybox=True) # reorganize legend handles, labels = ax[1].get_legend_handles_labels() handles = handles[:2] + [handles[-1], handles[-2], handles[-3], handles[2]] labels = labels[:2] + [labels[-1], labels[-2], labels[-3], labels[2]] ax[1].legend(handles, labels, loc=(0.76, 0.01), ncol=1, fontsize=FS - 5, frameon=True, fancybox=True) # ylab = ax[1].set_ylabel("CDF", **laba) ylab = ax[0].set_ylabel("PDF", **laba) xlab = ax[1].set_xlabel(r"$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$", **laba) # ax[1].set_xlim(-7,-2.5) for i in range(2): ax[i].set_xlim(1e-5, 1e-1) ax[1].set_ylim(-0.1, 1.1) ax[0].set_ylim([-0.1, ax[0].get_ylim()[-1]]) for i in range(2): ax[i].set_xscale("log") ax[i].tick_params(axis="both", labelsize=FS) plt.savefig( os.path.join(args.outdir, "all-models-cdfs-pdfs-nsinks-%d-2.png" % nsinks), bbox_extra_artists=[xlab, ylab], bbox_inches="tight", dpi=150, ) plt.close()
def mvp_for_peter(master_sink,args): #write MVP data to file for Peter rate=master_sink.mdot/mdotB() time=(master_sink.mdotTime-master_sink.mdotTime[0])/get_tBH() fout=open(os.path.join(os.path.dirname(args.master_sink),'%s.pickle' % args.str_beta),'w') master_sink=dump((rate,time),fout) fout.close()
def median_rate(ax,sink,args,raw=True,corr=True,clip=True,times=[],c_ls=[]): #tsteady): laba=dict(fontweight='bold',fontsize='xx-large') if raw: ax.plot(sink.tnorm(),np.median(sink.mdot,axis=0)/mdotB(),c='k',label='raw') if corr: ax.plot(sink.tnorm(),np.median(sink.mdot_vcorr,axis=0)/mdotB(),c='b',label='corr') if clip: ax.plot(sink.tnorm(),np.median(sink.mdot_vcorr_clip,axis=0)/mdotB(),c='r',label='corr, clip') for time,cls in zip(times,c_ls): ax.plot([time]*2,ax.get_ylim(),cls,lw=2.) ax.set_xlabel(r'$\mathbf{ t/t_{\rm{BH}} }$',**laba) #2nd axis ax2 = ax.twiny() ax2.set_xlabel(r'$\mathbf{ t/t_{\rm{ABH}} }$',fontweight='bold',fontsize='xx-large') ax2.plot(tBH_to_tBHA(sink.tnorm(),args.str_beta),np.median(sink.mdot_vcorr,axis=0)/mdotB(),visible=False) #ax.plot([t_steady]*2,ax[0].get_ylim(),'r--',label='Steady State') ax.text(ax.get_xlim()[1]*0.01,ax.get_ylim()[1]*0.9,'Median',fontweight='bold',fontsize='large',va='center',ha='left') ax.set_yscale('log') if args.ylim: ax.set_ylim(args.ylim[0],args.ylim[1]) ax.legend(loc=4,fontsize='small') ax.set_ylabel(r'Log $\mathbf{ \dot{M}/\dot{M}_{\rm{B}} }$',**laba)
def all_rates(sink, args, corr=True): fig,ax=plt.subplots() for i in range(sink.mdot.shape[0]): if corr: ax.plot(sink.tnorm(),sink.mdot_vcorr[i,:]/mdotB()) #,label='ID: %d' % i) else: ax.plot(sink.tnorm(),sink.mdot[i,:]/mdotB()) #,label='ID: %d' % i) ax.set_xlabel(r'$\mathbf{ t/t_{\rm{BH}} }$',fontweight='bold',fontsize='xx-large') #second x axis ax2 = ax.twiny() ax2.set_xlabel(r'$\mathbf{ t/t_{\rm{ABH}} }$',fontweight='bold',fontsize='xx-large') ax2.plot(tBH_to_tBHA(sink.tnorm(),args.str_beta),sink.mdot_vcorr[i,:]/mdotB(),visible=False) #y label, left vertical panels ax.set_ylabel(r'Log $\mathbf{ \dot{M}/\dot{M}_B }$',fontweight='bold',fontsize='xx-large') ax.set_yscale('log') if corr: lab= 'Model: %s, corrected' % args.str_beta else: lab= 'Model: %s' % args.str_beta ax.text(ax.get_xlim()[1]*0.01,ax.get_ylim()[1]*0.9,lab,fontweight='bold',fontsize='large',ha='left',va='top') #ax.legend(loc=(1.01,0),ncol=4) #,fontsize='small' if corr: name='all-rates-corrected-%s.png' % args.str_beta else: name='all-rates-%s.png' % args.str_beta #ax.set_xlim(0,20) plt.savefig(os.path.join(os.path.dirname(args.master_sink),name)) plt.close()
def plot_nmad(master,label): kwargs= dict(labargs=dict(fontsize=16,fontweight='bold'),\ xtickargs=dict(fontsize=13),\ ytickargs=dict(fontsize=16),\ legargs=dict(fontsize=12)) matplotlib.rcParams['xtick.labelsize'] = kwargs['xtickargs']['fontsize'] matplotlib.rcParams['ytick.labelsize'] = kwargs['ytickargs']['fontsize'] #fig,axes=plt.subplots(1,3,sharey=True) fig,ax= plt.subplots() x,y= master.med/mdotB(), master.nmad/mdotB() ax.scatter(x,y,s=50,c='b') #master.med/master.med.max()) ax.set_yscale('log') ax.set_xscale('log') ax.set_xlim(x.min()/2,x.max()*2) ax.set_ylim(y.min()/2,y.max()*2) if args.xlim and args.ylim: ax.set_xlim(args.xlim[0],args.xlim[1]) ax.set_ylim(args.ylim[0],args.ylim[1]) ax.set_xlabel(r'Median($\dot{M}/\dot{M}_B$)',**kwargs['labargs']) ax.set_ylabel(r'Med[|$\dot{M}$ - Med($\dot{M}$)|]/$\dot{M}_B$',**kwargs['labargs']) ax.set_title(r'NMAD, $\beta_0$ = ' + label,**kwargs['labargs']) plt.savefig('nmad_beta%s.png' % label) plt.close()
def steady_rates(mdotData,timeData,steady_wid,steady_end,units_tBH=True,fill_nan=True,str_beta=None,median=True): '''returns 64 length array of time averaged mdots for each sink if data does not exist in steady_wid fills with np.nan''' assert(units_tBH) assert(mdotData.shape[0] == 64) imin=np.where(timeData >= steady_end-steady_wid)[0].min() imax=np.where(timeData <= steady_end)[0].max() ind=range(imin,imax+1) try: if str_beta is not None: # plot median and mean mdot on same panel plt.plot(timeData,np.median(mdotData,axis=0)/mdotB(),'b-',label='median') plt.plot(timeData,np.mean(mdotData,axis=0)/mdotB(),'g-',label='mean') # Get bootstraps using mdot over sinks at each time pt med= bootstrap2(mdotData[:,ind]/mdotB(),str_beta, on_median=True) mean= bootstrap2(mdotData[:,ind]/mdotB(),str_beta, on_median=False) xvals=[timeData[ind].min(),timeData[ind].max()] plt.fill_between(xvals,med['low'],med['hi'],color='b',alpha=0.4) plt.fill_between(xvals,mean['low'],mean['hi'],color='g',alpha=0.4) print 'mdotData.shape=',mdotData.shape,'np.mean(mdotData,axis=0).shape=',np.mean(mdotData,axis=0).shape plt.legend(loc=0) plt.yscale('log') plt.savefig('medmean_%s.png' % str_beta) plt.close() # Also store these to text file fin=open('bootstrap_2.txt','a') fin.write('#beta sample_med -booterr +booterr sample_mean -booterr +booterr\n') fin.write('%s %.5g %.5g %.5g %.5g %.5g %.5g\n' % \ (str_beta,med['sample_med'],np.abs(med['med']-med['low']),np.abs(med['med']-med['hi']),\ mean['sample_mean'],np.abs(mean['med']-mean['low']),np.abs(mean['med']-mean['hi']))) fin.close() # indiv sink, median mean in steady state #for sid in [0,10,20,30,55]: # plt.plot(timeData[ind],mdotData[sid,ind]/mdotB(),'k-') # xvals=[timeData[ind].min(),timeData[ind].max()] # plt.plot(xvals,[np.median(mdotData[sid,ind])/mdotB()]*2,'b-',label='median') # plt.plot(xvals,[np.mean(mdotData[sid,ind])/mdotB()]*2,'g-',label='mean') # plt.legend(loc=0) # plt.yscale('log') # plt.savefig('medmean_sid%d_%s.png' % (sid,str_beta)) # plt.close() # Make plots showing rms fluctuation for individual sink #for sid in [0,10,20,30,55]: # plt.plot(timeData[ind],mdotData[sid,ind]/mdotB(),'b-') # xvals=[timeData[ind].min(),timeData[ind].max()] # med= np.median(mdotData[sid,ind])/mdotB() # std= np.std(mdotData[sid,ind]/mdotB() - med) # plt.plot(xvals,[med]*2,'k--',label='median') # plt.plot(xvals,[med+std]*2,'r--',label='+std') # plt.plot(xvals,[med-std]*2,'r--',label='-std') # plt.plot(xvals,[med+2*std]*2,'g--',label='+2std') # plt.plot(xvals,[med-2*std]*2,'g--',label='-2std') # plt.legend(loc=0) # plt.yscale('log') # plt.savefig('std_indivsink_sid%d_%s' % (sid,str_beta)) # plt.close() # Compute median 1-sigma fluctuation for all sinks, bootstrap the errors mdot= np.log10(mdotData[:,ind]/mdotB()) med= np.percentile(mdot,q=50.,axis=1) sig_sink={} for key,q in zip(['low','hi'],[15.8,84.2]): sig_sink[key]= np.abs(med - np.percentile(mdot,q=q,axis=1)) assert(len(sig_sink[key]) == 64) #sig_sink[key]= np.median(sig_sink[key]) #one_sigma= 1.*np.std(mdot.T - med,axis=0) # take median of one_sigmas and bootstrap it for error #med= np.median(one_sigma) #d_boots,final,std_pdf= bootstrap(one_sigma,str_beta,print_results=False) print "INDIV SINK MEDIAN 1-SIGMA = percentile(log10(mdot/mdotB)) then median over sinks: $median^{+q75}_{-q25}$" print "%s: $^{+%.8f}_{-%.8f}$" % (str_beta,np.median(sig_sink['hi']),np.median(sig_sink['low'])) for sid in [0,4,20,42,55,63]: plt.plot(timeData[ind],np.log10(mdotData[sid,ind]/mdotB()),'b-') xvals=[timeData[ind].min(),timeData[ind].max()] plt.fill_between(xvals,med[sid]-sig_sink['low'][sid],med[sid]+sig_sink['hi'][sid],color='b',alpha=0.4) plt.savefig('onesig_sid-%d_%s.png' % (sid,str_beta)) plt.close() #a,b,c=plt.hist(two_sigmas) #plt.plot([med]*2,[0,np.max(a)],'b--',label='median') #plt.plot([final['med']-final['med_low']]*2,[0,np.max(a)],'r--',label='- err median') #plt.plot([final['med']+final['med_hi']]*2,[0,np.max(a)],'r--',label='+ err median') #plt.legend(loc=0) #plt.savefig('twosigma_indivsink_%s' % str_beta) #plt.close() if median: return np.median(mdotData[:,ind],axis=1) else: print '----WARNING----: MEAN over steady state, bool_median=',median return np.mean(mdotData[:,ind],axis=1) except IndexError: print 'WARNING: no data between %.1f < t/tBH < %.1f' % (steady_end-steady_wid,steady_end) return np.empty(mdotData.shape[0])*np.nan
def errorbars_vs_beta2(final64,use_rms_beta=True,name='test.png'): '''all mdot quantities are in units of mdot/mdotB''' sns.set_style('ticks') #,{"axes.facecolor": ".97"}) sns.set_palette('colorblind') c_med='k' #median c_mean= sns.color_palette()[0] #'b' c_bhline= sns.color_palette()[1] #'g' c_aaron=sns.color_palette()[2] #error on median box 'r' c_mark= sns.color_palette()[3] #'pink' #kwargs laba=dict(fontweight='bold',fontsize=dFS) kwargs_axtext=dict(fontweight='bold',fontsize=FS,va='top') # orig final measure, REPLACED BY bootstrap_PDF.txt #med,med_low,med_hi,std_low,std_hi,yax_val,rms_beta,med_beta,name= put_errbars_in_arrays_linear(final64) # MEDIAN, bootstrap PDF bPDF= get_measurment('boot_PDF') bPDF= add_to_measurement(bPDF) # MEAN, bootstrap 2 b2= get_measurment('boot_2') b2= add_to_measurement(b2) # get rms_beta rms_beta= bPDF['rms_beta'] #marks results rmdot0= 0.0166 # Values when submitted to MNRAS #mark_norm_mdot0=dict(median_sim=0.35,median_pred_256=0.36,err_median_pred_256=0.1,\ # mean_pred_256=1.26,err_mean_pred_256=0.1,\ # mean_sim=0.9,err_mean_sim=0.1) # 0.1 is guess # Values for revision, after fitting marks table 1 mark_norm_mdot0=dict(median_sim=0.35,median_pred_256=0.36,err_median_pred_256=0.106,\ mean_pred_256=1.26,err_mean_pred_256=0.100,\ mean_sim=0.9,err_mean_sim=0.1) # 0.1 is guess mark_norm_mdotB={} for key in mark_norm_mdot0.keys(): mark_norm_mdotB[key]= mark_norm_mdot0[key]* 4/np.exp(1.5)/5.**3 #special figure for different sized subplots fig = plt.figure(figsize=(10,6)) gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) fig.subplots_adjust(wspace=0.05) ax=[0,0] ax[0] = plt.subplot(gs[0]) ax[1] = plt.subplot(gs[1]) #B != 0 points go on left side #ax[0].errorbar(rms_beta[:-2],med[:-2]/mdotB(),yerr=[med_low[:-2]/mdotB(),med_hi[:-2]/mdotB()], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med,label=r'This Study (Median)') # My Magnetic Points # median #ax[0].errorbar(rms_beta[:-2],med[:-2]/mdotB(),yerr=[med_low[:-2]/mdotB(),med_hi[:-2]/mdotB()], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)') ax[0].errorbar(bPDF['rms_beta'][:-2],bPDF['med'][:-2],yerr=[bPDF['med_low'][:-2],bPDF['med_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)') ax[0].errorbar(bPDF['rms_beta'][:-2],bPDF['med'][:-2],yerr=[bPDF['med_low'][:-2],bPDF['med_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med,label='Median') #ax[0].errorbar(b2['rms_beta'][:-2],b2['med'][:-2],yerr=[b2['med_low'][:-2],b2['med_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec='b',c='b',label='boot 2 median') # mean ax[0].errorbar(b2['rms_beta'][:-2],b2['mean'][:-2],yerr=[b2['mean_low'][:-2],b2['mean_hi'][:-2]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mean,c=c_mean,label='Mean') #just for legend, plot some junk with right colors for mine and marks #ax[0].plot([5,6],med[-2:],c=c_med,visible=False,label=r'This Study (Median $\mathbf{Log_{\rm{10}} \,\, \dot{M} }$)') #ax[0].plot([5,6],med[-2:],c=c_mark,visible=False,label='Krumholz et al. (2006)') #aarons cont_beta=np.logspace(-3,1,num=50) ax[0].plot(cont_beta,lee_parallel(cont_beta,b_norm=True),c=c_aaron,ls='--',lw=2,label='Lee et al. (2014)') #print useful number for paper #print 'ratio of mdot to (mdot_perp+mdot_par)/2 is: betarms,mdot,mdotpar,mdot/mdotpar' #for myb,mymdot,mdotpar in zip(rms_beta[:-2],med[:-2],np.log10(lee_parallel(rms_beta[:-2]))): print myb,mymdot,mdotpar,10**(mdotpar)/10**(mymdot) #mdot BH ax[0].plot(ax[0].get_xlim(),[mdotBH()/mdotB()]*2,c=c_bhline,ls='--',lw=2) ax[0].text(1e-2,mdotBH()/mdotB(),r'$\mathbf{ \dot{M}_{BH} }$',verticalalignment='bottom',**text) #,transform=ax[0].transAxes) #ax[0].text(1e-2,np.log10(mdotBH()),r'$\mathbf{ \dot{M}_{BH} }$',color=c_bhline,**kwargs_ax[0].ext) #B = 0 points go on right side ax[1].plot(range(10),visible=False) #Marks prediction ax[1].errorbar(4,mark_norm_mdotB['median_pred_256'],yerr=mark_norm_mdotB['err_median_pred_256'],fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)') #ax[1].errorbar(4,mark_norm_mdotB['mean_pred_256'],yerr=mark_norm_mdotB['err_mean_pred_256'],fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)') ax[1].errorbar(4,mark_norm_mdotB['mean_sim'],yerr=mark_norm_mdotB['err_mean_sim'],fmt='o',ms=6,mew=2.,mfc='none',mec=c_mark,c=c_mark,label='Krumholz et al. (2006)') #my hydro pts #ax[1].errorbar([5,6],med[-2:]/mdotB(),yerr=[med_low[-2:]/mdotB(),med_hi[-2:]/mdotB()], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med) ax[1].errorbar([5,6],bPDF['med'][-2:],yerr=[bPDF['med_low'][-2:],bPDF['med_hi'][-2:]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_med,c=c_med) #ax[1].errorbar([9,10],b2['med'][-2:],yerr=[b2['med_low'][-2:],b2['med_hi'][-2:]], fmt='o',ms=6,mew=2.,mfc='none',mec='r',c='r') ax[1].errorbar([5,6],b2['mean'][-2:],yerr=[b2['mean_low'][-2:],b2['mean_hi'][-2:]], fmt='o',ms=6,mew=2.,mfc='none',mec=c_mean,c=c_mean) #mdotBH and same for hydro limit of lee14 ax[1].plot(ax[1].get_xlim(),[mdotBH()/mdotB()]*2,c=c_bhline,ls='--',lw=2) ax[1].plot([0.5,8.5],[mdotBH()/mdotB()]*2,c=c_aaron,ls='--',lw=2) #finish labeling for i in range(2): ax[i].set_ylim(6e-4,1e-2) ax[0].set_xscale('log') ax[0].set_xlim(8e-3,1e1) #ax[1].set_xlim(2,1e1) ylab= ax[0].set_ylabel(r'$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$',**laba) xlab= fig.text(0.5, 0., r'$\mathbf{ \beta_{turb} }$', ha='center', **laba) #ax[0].set_xlabel(r'$\mathbf{ \beta_{rms} }$',**laba) ax[0].legend(loc=4,fontsize=FS,frameon=True,fancybox=True) #reorganize legend handles, labels = ax[0].get_legend_handles_labels() handles= [handles[-1],handles[-2],handles[1],handles[0]] labels= [labels[-1],labels[-2],labels[1],labels[0]] ax[0].legend(handles, labels,loc=4,frameon=True,fancybox=True,fontsize=FS) #remove top and right axis lines #sns.despine() #remove spines and ticks between ax and ax2 #ax[0].spines['right'].set_visible(False) #ax[1].spines['left'].set_visible(False) for i in range(2): ax[i].tick_params(axis='both', which='major', labelsize=FS) ax[1].set_yticks([]) #add slashes indicating break in axis d = .015 # how big to make the diagonal lines in axes coordinates # arguments to pass plot, just so we don't keep repeating them kwargs = dict(transform=ax[0].transAxes, color='k', clip_on=False) ax[0].plot((1-d,1+d), (-d,+d), **kwargs) ax[0].plot((1-d,1+d),(1-d,1+d), **kwargs) kwargs.update(transform=ax[1].transAxes) # switch to the bottom axes ax[1].plot((-d*3,+d*3), (1-d,1+d), **kwargs) ax[1].plot((-d*3,+d*3), (-d,+d), **kwargs) #put infinity on 2nd axis ax[1].set_xticks([]) ax[1].set_xlabel(r'$\mathbf{ \infty }$',**laba) #plt.tick_params(axis='both', which='major', labelsize='large') # show only some of yaxis ticks #ax[0].yaxis.tick_left() ax[1].yaxis.tick_right() # y log scale for i in range(2): ax[i].set_yscale('log') #SAVE IS BROKEN, save manually plt.tight_layout() #plt.show() #save name='testing.png' plt.savefig(name, bbox_extra_artists=[xlab,ylab], bbox_inches='tight',dpi=150) print 'wrote %s' % name
def errorbars_vs_beta2(final64, use_rms_beta=True): """all mdot quantities are in units of mdot/mdotB""" sns.set_style("ticks") # ,{"axes.facecolor": ".97"}) sns.set_palette("colorblind") c_med = "k" # median c_bhline = sns.color_palette()[0] #'b' c_aaron = sns.color_palette()[2] # error on median box 'r' c_mark = sns.color_palette()[1] #'g' # kwargs laba = dict(fontweight="bold", fontsize="xx-large") kwargs_axtext = dict(fontweight="bold", fontsize="x-large", va="top") # final measure med, med_low, med_hi, std_low, std_hi, yax_val, rms_beta, med_beta, name = put_errbars_in_arrays_linear(final64) # marks results rmdot0 = 0.0166 mark_norm_mdot0 = dict(median_sim=0.35, median_pred_256=0.36, err_median_pred_256=0.1) mark_norm_mdotB = {} for key in mark_norm_mdot0.keys(): mark_norm_mdotB[key] = mark_norm_mdot0[key] * 4 / np.exp(1.5) / 5.0 ** 3 # special figure for different sized subplots fig = plt.figure() gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) fig.subplots_adjust(wspace=0.05) ax = [0, 0] ax[0] = plt.subplot(gs[0]) ax[1] = plt.subplot(gs[1]) # B != 0 points go on left side ax[0].errorbar( rms_beta[:-2], med[:-2] / mdotB(), yerr=[med_low[:-2] / mdotB(), med_hi[:-2] / mdotB()], fmt="o", ms=6, mew=2.0, mfc="none", mec=c_mark, c=c_mark, label="Krumholz et al. (2006)", ) ax[0].errorbar( rms_beta[:-2], med[:-2] / mdotB(), yerr=[med_low[:-2] / mdotB(), med_hi[:-2] / mdotB()], fmt="o", ms=6, mew=2.0, mfc="none", mec=c_med, c=c_med, label=r"This Study (Median)", ) # just for legend, plot some junk with right colors for mine and marks # ax[0].plot([5,6],med[-2:],c=c_med,visible=False,label=r'This Study (Median $\mathbf{Log_{\rm{10}} \,\, \dot{M} }$)') # ax[0].plot([5,6],med[-2:],c=c_mark,visible=False,label='Krumholz et al. (2006)') # aarons cont_beta = np.logspace(-3, 1, num=50) ax[0].plot(cont_beta, lee_parallel(cont_beta, b_norm=True), c=c_aaron, ls="--", lw=2, label="Lee et al. (2014)") # print useful number for paper print "ratio of mdot to (mdot_perp+mdot_par)/2 is: betarms,mdot,mdotpar,mdot/mdotpar" for myb, mymdot, mdotpar in zip(rms_beta[:-2], med[:-2], np.log10(lee_parallel(rms_beta[:-2]))): print myb, mymdot, mdotpar, 10 ** (mdotpar) / 10 ** (mymdot) # mdot BH ax[0].plot( ax[0].get_xlim(), [mdotBH() / mdotB()] * 2, c=c_bhline, ls="--", lw=2, label=r"$\mathbf{ \dot{M}_{BH} }$" ) # ax[0].text(1e-2,np.log10(mdotBH()),r'$\mathbf{ \dot{M}_{BH} }$',color=c_bhline,**kwargs_ax[0].ext) # B = 0 points go on right side ax[1].plot(range(10), visible=False) # Marks prediction ax[1].errorbar( 4, mark_norm_mdotB["median_pred_256"], yerr=mark_norm_mdotB["err_median_pred_256"], fmt="o", ms=6, mew=2.0, mfc="none", mec=c_mark, c=c_mark, label="Krumholz et al. (2006)", ) # my hydro pts ax[1].errorbar( [5, 6], med[-2:] / mdotB(), yerr=[med_low[-2:] / mdotB(), med_hi[-2:] / mdotB()], fmt="o", ms=6, mew=2.0, mfc="none", mec=c_med, c=c_med, ) # mdotBH and same for hydro limit of lee14 ax[1].plot(ax[1].get_xlim(), [mdotBH() / mdotB()] * 2, c=c_bhline, ls="--", lw=2) ax[1].plot([0.5, 8.5], [mdotBH() / mdotB()] * 2, c=c_aaron, ls="--", lw=2) # finish labeling for i in range(2): ax[i].set_ylim(6e-4, 1e-2) ax[0].set_xscale("log") ax[0].set_xlim(8e-3, 1e1) # ax[1].set_xlim(2,1e1) ylab = ax[0].set_ylabel(r"$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$", **laba) xlab = fig.text( 0.5, 0.0, r"$\mathbf{ \beta_{rms} }$", ha="center", **laba ) # ax[0].set_xlabel(r'$\mathbf{ \beta_{rms} }$',**laba) ax[0].legend(loc=4, fontsize="medium", frameon=True, fancybox=True) # reorganize legend handles, labels = ax[0].get_legend_handles_labels() handles = [handles[-1], handles[-2], handles[0], handles[1]] labels = [labels[-1], labels[-2], labels[0], labels[1]] ax[0].legend(handles, labels, loc=4, fontsize="medium", frameon=True, fancybox=True) # remove top and right axis lines # sns.despine() # remove spines and ticks between ax and ax2 # ax[0].spines['right'].set_visible(False) # ax[1].spines['left'].set_visible(False) for i in range(2): ax[i].tick_params(axis="both", which="major", labelsize="large") ax[1].set_yticks([]) # add slashes indicating break in axis d = 0.015 # how big to make the diagonal lines in axes coordinates # arguments to pass plot, just so we don't keep repeating them kwargs = dict(transform=ax[0].transAxes, color="k", clip_on=False) ax[0].plot((1 - d, 1 + d), (-d, +d), **kwargs) ax[0].plot((1 - d, 1 + d), (1 - d, 1 + d), **kwargs) kwargs.update(transform=ax[1].transAxes) # switch to the bottom axes ax[1].plot((-d * 3, +d * 3), (1 - d, 1 + d), **kwargs) ax[1].plot((-d * 3, +d * 3), (-d, +d), **kwargs) # put infinity on 2nd axis ax[1].set_xticks([]) ax[1].set_xlabel(r"$\mathbf{ \infty }$", fontsize="large") # plt.tick_params(axis='both', which='major', labelsize='large') # show only some of yaxis ticks # ax[0].yaxis.tick_left() ax[1].yaxis.tick_right() # y log scale for i in range(2): ax[i].set_yscale("log") # save plt.savefig( os.path.join(args.outdir, "errorbars_v_brms2.png"), bbox_extra_artists=[xlab, ylab], bbox_inches="tight" )
def model_vs_errorbars2(final64): """final64 is linear mdots now put model names on y axis, error bars on x axis""" sns.set_style("ticks") # ,{"axes.facecolor": ".97"}) sns.set_palette("colorblind") c_med = "k" # median c_sem = sns.color_palette()[2] # error on median box 'r', bootstraped c_std = sns.color_palette()[0] # std dev of pdf 'b', percentiled # kwargs laba = dict(fontweight="bold", fontsize="xx-large") kwargs_axtext = dict(fontweight="bold", fontsize="x-large", va="top", ha="left") # mapping addtext = {} addtext["bInf"] = r"$\mathbf{ \beta_0 = \infty }$ (1)" addtext["bInfsd3"] = r"$\mathbf{ \beta_0 = \infty }$ (2)" addtext["b100"] = r"$\mathbf{ \beta_0 = 100 }$" addtext["b10"] = r"$\mathbf{ \beta_0 = 10 }$" addtext["b1"] = r"$\mathbf{ \beta_0 = 1 }$" addtext["b1e-1"] = r"$\mathbf{ \beta_0 = 0.1 }$" addtext["b1e-2"] = r"$\mathbf{ \beta_0 = 0.01 }$" # plot fig, ax = plt.subplots() ax.set_ylim(0, 8) ax.set_xlim(1e-4, 2e-2) ylabels = [item.get_text() for item in ax.get_yticklabels()] # y tick labels meds, med_lows, med_his, std_lows, std_his, yax_vals, rms_betas, med_betas, names = put_errbars_in_arrays_linear( final64 ) for med, med_low, med_hi, std_low, std_hi, yax_val, rms_beta, med_beta, name in zip( meds, med_lows, med_his, std_lows, std_his, yax_vals, rms_betas, med_betas, names ): if name == names[-1]: box_and_whisker( ax, med / mdotB(), (med_low / mdotB(), med_hi / mdotB()), (std_low / mdotB(), std_hi / mdotB()), yax_val, legend_lab_ea_color=True, ) else: box_and_whisker( ax, med / mdotB(), (med_low / mdotB(), med_hi / mdotB()), (std_low / mdotB(), std_hi / mdotB()), yax_val ) ylabels[yax_val] = addtext[name] ax.set_yticklabels(ylabels, fontsize="large") xlab = ax.set_xlabel(r"$\mathbf{\dot{M}/\dot{M}_{\rm{B}} }$", **laba) ylab = ax.set_ylabel("Simulation", **laba) ax.legend(loc=4, fontsize=10, frameon=True, fancybox=True) plt.tick_params(axis="x", which="major", labelsize="large") # turn off horizontal grid lines ax.yaxis.grid(False) ax.xaxis.grid(True) ax.set_xscale("log") ax.yaxis.tick_left() # ax.set_yticks([]) # remove top and right axis lines # sns.despine() # save plt.savefig( os.path.join(args.outdir, "models-vs-errorbars2.png"), bbox_extra_artists=[xlab, ylab], bbox_inches="tight" )
raise ValueError model_v_model_cdfs_pdfs(final_pdf["arr"], final_pdf["bins"], final_pdf["cdf"], final_pdf["pdf"], args, nsinks=nsinks) # final measurement # print 'Quantities using mdot= Log10(Mdot)' # final_meas= stats.final_measurement(final_pdf['arr']) # This gives correct Mdot/MdotB final measurements BUT the values CAN be computed from above log10(Mdot) like this # q25,q50,q75 = above q25,q50,q75 / mdotB # define: y= log10(mdot), x= mdot/mdotB # then x = exp(y*ln10)/mdotB # so sigma_x = sigma_y* exp(y*ln10)*ln10/mdotB) # doing that agrees with numbers output below final_pdf_linear, final_pdf_log = {}, {} for key in final_pdf["arr"].keys(): # final_pdf_linear[key]= np.log10( np.power(10,final_pdf['arr'][key])/ mdotB() ) final_pdf_linear[key] = np.power(10, final_pdf["arr"][key]) / mdotB() final_pdf_log[key] = np.log10(np.power(10, final_pdf["arr"][key]) / mdotB()) print "Quantities using mdot/mdotB, where mdotB=", mdotB() final_meas_linear = stats.final_measurement(final_pdf_linear) print "Quantities using log10(mdot/mdotB), where mdotB=", mdotB() final_meas_log = stats.final_measurement(final_pdf_log) exit("exiting after print final mean measurements") # The plots below used to work when mdot = mdot without mdotB normalization # They don't know but can recreate by going to appropriate commmit # for key in final_pdf_linear.keys(): final_pdf_linear[key] = final_pdf_linear[key] * mdotB() # plot model name vs. errobars, do for both final64 and final128 model_vs_errorbars(final_meas)
master={} for sink_dir,str_beta in zip(args.dirs,args.labels): fin=open(os.path.join(sink_dir,'master_sink.pickle'),'r') master[str_beta]=pickle.load(fin) master[str_beta].sink_xyz(args.init_sink) fin.close() sizes=range(len(args.labels)) for i,str_beta in enumerate(args.labels): sizes[i]= master[str_beta].mdotTime.shape[0] junk=args.labels[0] x= np.empty( (master[junk].mdot.shape[0],)+(max(sizes),)+(len(args.labels),))*np.nan y=x.copy() for i,str_beta in enumerate(args.labels): time=(master[str_beta].mdotTime-master[str_beta].mdotTime[0])/get_tBH() x[:,:sizes[i],i]= np.transpose(np.repeat(time[:,np.newaxis], x.shape[0], axis=1)) #(npts,) array to (64,npts,) y[:,:sizes[i],i]= master[str_beta].mdot/mdotB() titles= np.core.defchararray.add(np.array(['sid ']*len(master[str_beta].init.sid)),master[str_beta].init.sid.astype(str)) nrow,ncol=8,8 multi_plot(nrow,ncol,x,y,titles=titles,logy=True,ylim=args.ylim) print 'exiting after correlated sinks' sys.exit(0) #nmad plot print 'plotting nmad' for sink_dir,label in zip(args.dirs,args.labels): fin=open(os.path.join(sink_dir,'master_sink.pickle'),'r') master=pickle.load(fin) fin.close() plot_nmad(master,label)