#added a few additional plotting options

#a bug remains for the plotting of the medians on top of the NARCLIM delta plots
Development1
Valentin Heimhuber 6 years ago
parent 00e63c6c29
commit 0a8d32769e

@ -49,21 +49,24 @@ for Est in Estuaries:
Base_period_DELTA_start = '1990-01-01' #Start of interval used for calculating mean and SD for base period (Delta base period) Base_period_DELTA_start = '1990-01-01' #Start of interval used for calculating mean and SD for base period (Delta base period)
Base_period_end = '2009-01-01' #use last day that's not included in period as < is used for subsetting Base_period_end = '2009-01-01' #use last day that's not included in period as < is used for subsetting
Clim_var_type = 'pracc' #Name of climate variable in NARCLIM models '*' will create pdf for all variables in folder Clim_var_type = 'pracc' #Name of climate variable in NARCLIM models '*' will create pdf for all variables in folder
Stats = 'maxdaily' #'maxdaily' #maximum takes the annual max Precipitation instead of the sum Stats = 'days_h_30' #'maxdaily' #maximum takes the annual max Precipitation instead of the sum
PD_Datasource = 'SILO' #Source for present day climate data (historic time series) can be either: 'Station' or 'SILO' PD_Datasource = 'Station' #Source for present day climate data (historic time series) can be either: 'Station' or 'SILO'
SILO_Clim_var = ['daily_rain'] #select the SILO clim variable to be used for base period. - see silo.py for detailed descriptions SILO_Clim_var = ['max_temp'] #select the SILO clim variable to be used for base period. - see silo.py for detailed descriptions
Location = 'Estuary' # pick locaiton for extracting the SILO data can be: Estuary, Catchment, or Ocean Location = 'Estuary' # pick locaiton for extracting the SILO data can be: Estuary, Catchment, or Ocean
Main_Plot = 'yes'
presentdaybar = False #include a bar for present day variability in the plots? presentdaybar = False #include a bar for present day variability in the plots?
present_day_plot = 'yes' #save a time series of present day present_day_plot = 'no' #save a time series of present day
Allin1_delta_plot = 'no' Allin1_delta_plot = 'yes'
Version = "V4" Median_markers = 'no' #plot the median horizontal lines on top of the delta range in the allin1 plot?
Figure_headings = 'no'
Version = "V1"
ALPHA_figs = 0 #Set alpha of figure background (0 makes everything around the plot panel transparent) ALPHA_figs = 0 #Set alpha of figure background (0 makes everything around the plot panel transparent)
font = {'family' : 'sans-serif', font = {'family' : 'sans-serif',
'weight' : 'normal', 'weight' : 'normal',
'size' : 14} 'size' : 14} #size of axis labels
matplotlib.rc('font', **font) #size of axis labels matplotlib.rc('font', **font)
#==========================================================# #==========================================================#
@ -144,6 +147,8 @@ for Est in Estuaries:
#for tasmean, observed min and max T need to be converted into mean T #for tasmean, observed min and max T need to be converted into mean T
elif Clim_var_type == 'tasmean': elif Clim_var_type == 'tasmean':
[minplotDelta, maxplotDelta]=[0.2,1] [minplotDelta, maxplotDelta]=[0.2,1]
elif Clim_var_type == 'sstmean':
[minplotDelta, maxplotDelta]=[40,40]
elif Clim_var_type == 'tasmax': elif Clim_var_type == 'tasmax':
[minplotDelta, maxplotDelta]=[1,2] [minplotDelta, maxplotDelta]=[1,2]
elif Clim_var_type == 'wssmean' or Clim_var_type == 'wss1Hmaxtstep': elif Clim_var_type == 'wssmean' or Clim_var_type == 'wss1Hmaxtstep':
@ -203,22 +208,22 @@ for Est in Estuaries:
if temp == 'annual': if temp == 'annual':
Ensemble_Delta_df = Ensemble_Delta_full_df.iloc[:,range(0,2)] Ensemble_Delta_df = Ensemble_Delta_full_df.iloc[:,range(0,2)]
Present_Day_ref_df = Present_day_df_annual Present_Day_ref_df = Present_day_df_annual
Column_names = ['near', 'far'] Column_names = ['Annual_near', 'Annual_far']
else: else:
Ensemble_Delta_df = Ensemble_Delta_full_df.filter(regex= temp) Ensemble_Delta_df = Ensemble_Delta_full_df.filter(regex= temp)
Ensemble_Delta_df.columns = ['near', 'far'] Ensemble_Delta_df.columns = ['near', 'far']
if temp == 'DJF': if temp == 'DJF':
Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==1] Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==1]
Column_names = ['DJF_near', 'DJF_far'] Column_names = ['Summer_near', 'Summer_far']
if temp == 'MAM': if temp == 'MAM':
Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==2] Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==2]
Column_names = ['MAM_near', 'MAM_far'] Column_names = ['Autumn_near', 'Autumn_far']
if temp == 'JJA': if temp == 'JJA':
Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==3] Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==3]
Column_names = ['JJA_near', 'JJA_far'] Column_names = ['Winter_near', 'Winter_far']
if temp == 'SON': if temp == 'SON':
Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==4] Mean_df = Fdf_Seas_means[Fdf_Seas_means.index.quarter==4]
Column_names = ['SON_near', 'SON_far'] Column_names = ['Spring_near', 'Spring_far']
Present_Day_ref_df = Mean_df Present_Day_ref_df = Mean_df
#Subset to present day variability period #Subset to present day variability period
Present_Day_ref_df = pd.DataFrame(Present_Day_ref_df.loc[(Present_Day_ref_df.index >= Base_period_start) & (Present_Day_ref_df.index <= Base_period_end)]) Present_Day_ref_df = pd.DataFrame(Present_Day_ref_df.loc[(Present_Day_ref_df.index >= Base_period_start) & (Present_Day_ref_df.index <= Base_period_end)])
@ -279,7 +284,7 @@ for Est in Estuaries:
Plot_in_df3['near future'] = df.iloc[1,0] Plot_in_df3['near future'] = df.iloc[1,0]
Plot_in_df3['far future'] = df.iloc[0,0] Plot_in_df3['far future'] = df.iloc[0,0]
Plot_in_df3 = Plot_in_df3.transpose() Plot_in_df3 = Plot_in_df3.transpose()
plt.plot(Plot_in_df3['Med'], linestyle="", markersize=52, plt.plot(Plot_in_df3['Med'], linestyle="", markersize=45,
marker="_", color='darkblue', label="Median") marker="_", color='darkblue', label="Median")
z = plt.axhline(float(Present_Day_Mean-2*Present_Day_SD), linestyle='-', color='black', alpha=.5) z = plt.axhline(float(Present_Day_Mean-2*Present_Day_SD), linestyle='-', color='black', alpha=.5)
z.set_zorder(-1) z.set_zorder(-1)
@ -291,8 +296,10 @@ for Est in Estuaries:
z.set_zorder(-1) z.set_zorder(-1)
z = plt.axhline(float(Present_Day_Mean), linestyle='--', color='red', alpha=.5) z = plt.axhline(float(Present_Day_Mean), linestyle='--', color='red', alpha=.5)
z.set_zorder(-1) z.set_zorder(-1)
plt.ylim(xmin, xmax) #plt.ylim(xmin, xmax)
plt.title(Clim_var_type + ' ' + temp ) plt.ylim(10, 140)
if Figure_headings == 'yes':
plt.title(Clim_var_type + ' ' + temp )
ax.grid(False) ax.grid(False)
for tick in ax.get_xticklabels(): for tick in ax.get_xticklabels():
tick.set_rotation(0) tick.set_rotation(0)
@ -314,10 +321,12 @@ for Est in Estuaries:
z = plt.axhline(float(Present_Day_Mean), linestyle='--', color='red', alpha=.5) z = plt.axhline(float(Present_Day_Mean), linestyle='--', color='red', alpha=.5)
z.set_zorder(-1) z.set_zorder(-1)
#fig.patch.set_facecolor('deepskyblue') #fig.patch.set_facecolor('deepskyblue')
plt.ylim(0, 40)
fig.tight_layout() fig.tight_layout()
fig.patch.set_alpha(ALPHA_figs) fig.patch.set_alpha(ALPHA_figs)
plt.title(Clim_var_type + ' ' + Stats + ' ' + temp +' present day') if Figure_headings == 'yes':
plt.ylim(xmin, xmax) plt.title(Clim_var_type + ' ' + Stats + ' ' + temp +' present day')
#plt.ylim(xmin, xmax)
ax.grid(False) ax.grid(False)
#if temp == 'MAM': #if temp == 'MAM':
i=i+4 i=i+4
@ -327,73 +336,127 @@ for Est in Estuaries:
Plot_in_df_tp.index = Column_names Plot_in_df_tp.index = Column_names
Plot_in_df_tp['-2std'] = Plot_in_df_tp['-2std'] - Present_Day_Mean Plot_in_df_tp['-2std'] = Plot_in_df_tp['-2std'] - Present_Day_Mean
Combined_Delta_df = pd.concat([Combined_Delta_df, Plot_in_df_tp], axis=0) Combined_Delta_df = pd.concat([Combined_Delta_df, Plot_in_df_tp], axis=0)
if Allin1_delta_plot == 'yes':
ax=plt.subplot(2,4,4)
temp = Combined_Delta_df[0:2]
Plot_in_df_tp = temp
uni_colors = ['none', 'cornflowerblue', 'cornflowerblue','cornflowerblue','cornflowerblue']
Plot_in_df_tp['Median'] = pd.DataFrame(Plot_in_df_tp['-2std'] + Plot_in_df_tp['Med'])
if int(Plot_in_df_tp.stack().min(axis=None,skipna=True)) < 0:
Bottom = int(Plot_in_df_tp.stack().min(axis=None,skipna=True)) -1
Plot_in_df_tp['-2std'] = Plot_in_df_tp['-2std'] - Bottom
Plot_in_df_tp.plot.bar(stacked=True, color=uni_colors, edgecolor='none', legend=False, width=0.5,ax=ax, bottom = Bottom)
else:
Plot_in_df_tp.plot.bar(stacked=True, color=uni_colors, edgecolor='none', legend=False, width=0.5,ax=ax)
if Median_markers == 'yes':
plt.plot(Plot_in_df_tp.index, Plot_in_df_tp['Median'], linestyle="", markersize=13,
marker="_", color='darkblue', label="Median")
z = plt.axhline(float(0), linestyle='--', color='red', alpha=.5)
z.set_zorder(-1)
plt.ylim(-1, 20)
if Figure_headings == 'yes':
plt.title(Clim_var_type + ' All Deltas ' + Stats)
#ax.grid(False)
ax.xaxis.grid(False)
for tick in ax.get_xticklabels():
tick.set_rotation(10)
fig.tight_layout()
fig.patch.set_alpha(ALPHA_figs)
#plt.show() #plt.show()
if presentdaybar == False: if Main_Plot == 'yes':
out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + PD_Datasource + '_' + SILO_Clim_var[0] + '_' + Version + '_' + '_NPDB.png' if presentdaybar == False:
else: out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + PD_Datasource + '_' + SILO_Clim_var[0] + '_' + Version + '_' + '_NPDB.png'
out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + PD_Datasource + '_' + SILO_Clim_var[0] + '_' + Version + '_' + '2.png' else:
out_path = output_directory + '/' + out_file_name out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + PD_Datasource + '_' + SILO_Clim_var[0] + '_' + Version + '_' + '2.png'
fig.savefig(out_path) out_path = output_directory + '/' + out_file_name
fig.savefig(out_path)
plt.close(fig)
if Allin1_delta_plot == 'yes': if Allin1_delta_plot == 'yes':
fig = plt.figure(figsize=(14,8)) fig = plt.figure(figsize=(14,8))
ax = fig.add_subplot(2, 2, 1) ax = fig.add_subplot(2, 3, 1)
Plot_in_df_tp = pd.DataFrame(Combined_Delta_df) temp = Combined_Delta_df
Bottom = int(Plot_in_df_tp.stack().min(axis=None,skipna=True)) - 1 Plot_in_df_tp = temp
Plot_in_df_tp = Plot_in_df_tp - Bottom
Plot_in_df = Plot_in_df_tp.transpose()
uni_colors = ['none', 'cornflowerblue', 'cornflowerblue','cornflowerblue','cornflowerblue'] uni_colors = ['none', 'cornflowerblue', 'cornflowerblue','cornflowerblue','cornflowerblue']
Plot_in_df_tp.plot.bar(stacked=True, color=uni_colors, edgecolor='none', legend=False, width=0.5,ax=ax, bottom=Bottom) Plot_in_df_tp['Median'] = pd.DataFrame(Plot_in_df_tp['-2std'] + Plot_in_df_tp['Med'])
plt.plot(Plot_in_df_tp['Med'], linestyle="", markersize=23, if int(Plot_in_df_tp.stack().min(axis=None,skipna=True)) < 0:
marker="_", color='darkblue', label="Median") Bottom = int(Plot_in_df_tp.stack().min(axis=None,skipna=True)) -1
Plot_in_df_tp['-2std'] = Plot_in_df_tp['-2std'] - Bottom
Plot_in_df_tp.plot.bar(stacked=True, color=uni_colors, edgecolor='none', legend=False, width=0.5,ax=ax, bottom = Bottom)
else:
Plot_in_df_tp.plot.bar(stacked=True, color=uni_colors, edgecolor='none', legend=False, width=0.5,ax=ax)
if Median_markers == 'yes':
plt.plot(Plot_in_df_tp.index, Plot_in_df_tp['Median'], linestyle="", markersize=13,
marker="_", color='darkblue', label="Median")
z = plt.axhline(float(0), linestyle='--', color='red', alpha=.5) z = plt.axhline(float(0), linestyle='--', color='red', alpha=.5)
z.set_zorder(-1) z.set_zorder(-1)
#plt.ylim(xmin, xmax) plt.ylim(-5, 10)
plt.title(Clim_var_type + ' All Delstas ' + Stats) if Figure_headings == 'yes':
ax.grid(False) plt.title(Clim_var_type + ' All Delstas ' + Stats)
#ax.grid(False)
ax.xaxis.grid(False)
for tick in ax.get_xticklabels(): for tick in ax.get_xticklabels():
tick.set_rotation(90) tick.set_rotation(90)
fig.tight_layout() fig.tight_layout()
fig.patch.set_alpha(ALPHA_figs) fig.patch.set_alpha(ALPHA_figs)
#plt.show() plt.show()
#export plot to png #export plot to png
out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + Base_period_start + '_' + Base_period_end + '_' + Version + '_All_Deltas_In1.png' out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + Base_period_start + '_' + Base_period_end + '_' + Version + '_All_Deltas_In1.png'
out_path = output_directory + '/' + out_file_name out_path = output_directory + '/' + out_file_name
fig.savefig(out_path) fig.savefig(out_path)
plt.close(fig)
##make barplot with alternating colours
#men_means, men_std = (20, 35, 30, 35, 27), (2, 3, 4, 1, 2)
#women_means, women_std = (25, 32, 34, 20, 25), (3, 5, 2, 3, 3)
#
#ind = np.arange(len(men_means)) # the x locations for the groups
#width = 0.35 # the width of the bars
#
#fig, ax = plt.subplots()
#rects1 = ax.bar(ind - width/2, men_means, width, yerr=men_std,
# color='SkyBlue', label='Men')
#rects2 = ax.bar(ind + width/2, women_means, width, yerr=women_std,
# color='IndianRed', label='Women')
#
## Add some text for labels, title and custom x-axis tick labels, etc.
#ax.set_ylabel('Scores')
#ax.set_title('Scores by group and gender')
#ax.set_xticks(ind)
#ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5'))
#ax.legend()
if present_day_plot == 'yes': if present_day_plot == 'yes':
#print present day climate data #print present day climate data
fig = plt.figure(figsize=(5,4)) fig = plt.figure(figsize=(14,8))
ax = fig.add_subplot(1, 1, 1) for i1 in range(2):
if temp == 'annual': if i1 ==0:
xmin = int(min(Plot_in_df.min(axis=1))-minplotDelta) ax = fig.add_subplot(2, 3, 1)
xmax = int(max(Plot_in_df.max(axis=1))+maxplotDelta) else:
else: ax = fig.add_subplot(2, 1, 2)
xmin = int(min(Plot_in_df.min(axis=1))-minplotDelta) xmin = int(min(Plot_in_df.min(axis=1))-minplotDelta)
xmax = int(max(Plot_in_df.max(axis=1))+maxplotDelta) xmax = int(max(Plot_in_df.max(axis=1))+maxplotDelta)
Present_Day_ref_df.plot(legend=False, ax=ax)
Present_Day_ref_df.plot(legend=False, ax=ax) z = plt.axhline(float(Present_Day_Mean-2*Present_Day_SD), linestyle='-', color='black', alpha=.5)
z = plt.axhline(float(Present_Day_Mean-2*Present_Day_SD), linestyle='-', color='black', alpha=.5) z.set_zorder(-1)
z.set_zorder(-1) z = plt.axhline(float(Present_Day_Mean+2*Present_Day_SD), linestyle='-', color='black', alpha=.5)
z = plt.axhline(float(Present_Day_Mean+2*Present_Day_SD), linestyle='-', color='black', alpha=.5) z.set_zorder(-1)
z.set_zorder(-1) z = plt.axhline(float(Present_Day_Mean-Present_Day_SD), linestyle='--', color='black', alpha=.5)
z = plt.axhline(float(Present_Day_Mean-Present_Day_SD), linestyle='--', color='black', alpha=.5) z.set_zorder(-1)
z.set_zorder(-1) z = plt.axhline(float(Present_Day_Mean+Present_Day_SD), linestyle='--', color='black', alpha=.5)
z = plt.axhline(float(Present_Day_Mean+Present_Day_SD), linestyle='--', color='black', alpha=.5) z.set_zorder(-1)
z.set_zorder(-1) z = plt.axhline(float(Present_Day_Mean), linestyle='--', color='red', alpha=.5)
z = plt.axhline(float(Present_Day_Mean), linestyle='--', color='red', alpha=.5) z.set_zorder(-1)
z.set_zorder(-1) #fig.patch.set_facecolor('deepskyblue')
#fig.patch.set_facecolor('deepskyblue') fig.patch.set_alpha(0)
fig.patch.set_alpha(0) plt.ylim(0, 400)
plt.ylim(13, xmax) #export plot to png
#export plot to png out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + Base_period_start + '_' + Base_period_end + '_' + Version + 'Present_Day_Period.png'
out_file_name = Estuary + '_' + Clim_var_type + '_' + Stats + '_' + Base_period_start + '_' + Base_period_end + '_' + Version + 'Present_Day_Period.png' out_path = output_directory + '/' + out_file_name
out_path = output_directory + '/' + out_file_name fig.savefig(out_path)
fig.savefig(out_path) plt.close(fig)
# use transparent=True if you want the whole figure with a transparent background # use transparent=True if you want the whole figure with a transparent background

@ -51,11 +51,15 @@ for Est in Estuaries:
Clim_var_types = ['pracc'] Clim_var_types = ['pracc']
for climvar in Clim_var_types: for climvar in Clim_var_types:
Clim_var_type = climvar Clim_var_type = climvar
#==========================================================#
#set input preferences
#==========================================================#
plot_pdf = 'no' plot_pdf = 'no'
plot_pngs = 'yes' plot_pngs = 'yes'
delta_csv = 'no' delta_csv = 'yes'
Stats = 'mean' # 'maxdaily', 'mean' Stats = 'days_h_30' # 'maxdaily', 'mean', 'days_h_25'
Version = 'V2' Version = 'V1'
#==========================================================# #==========================================================#
@ -110,9 +114,13 @@ for Est in Estuaries:
Full_df = Full_df.iloc[:,0:(Ncols_df-1)]-273.15 Full_df = Full_df.iloc[:,0:(Ncols_df-1)]-273.15
if Clim_var_type == 'evspsblmean' or Clim_var_type == 'potevpmean': if Clim_var_type == 'evspsblmean' or Clim_var_type == 'potevpmean':
Full_df = Full_df.iloc[:,0:(Ncols_df-1)]*60*60*24 Full_df = Full_df.iloc[:,0:(Ncols_df-1)]*60*60*24
Fdf_1900_2080 = Full_df if Clim_var_type in ['pr30maxtstep','pr10maxtstep','pr20maxtstep']:
Full_df = Full_df.iloc[:,0:(Ncols_df-1)]*60*30 #int(Clim_var_type[2:4])
if Clim_var_type in ['pr1Hmaxtstep']:
Full_df = Full_df.iloc[:,0:(Ncols_df-1)]*60*60
if Clim_var_type in ['rsdsmean','rldsmean']: if Clim_var_type in ['rsdsmean','rldsmean']:
Full_df = Full_df.iloc[:,0:(Ncols_df-1)]*60*60*24/1000000 Full_df = Full_df.iloc[:,0:(Ncols_df-1)]*60*60*24/1000000
Fdf_1900_2080 = Full_df
#==========================================================# #==========================================================#
@ -248,6 +256,7 @@ for Est in Estuaries:
fig.patch.set_alpha(ALPHA_figs) fig.patch.set_alpha(ALPHA_figs)
fig.tight_layout() fig.tight_layout()
fig.savefig(png_out_path) fig.savefig(png_out_path)
plt.close()
#=========# #=========#
#=========# #=========#
@ -269,6 +278,7 @@ for Est in Estuaries:
fig.patch.set_alpha(ALPHA_figs) fig.patch.set_alpha(ALPHA_figs)
fig.tight_layout() fig.tight_layout()
fig.savefig(png_out_path) fig.savefig(png_out_path)
plt.close()
#=========# #=========#
#=========# #=========#
@ -283,7 +293,10 @@ for Est in Estuaries:
Mod_Names = test.columns Mod_Names = test.columns
New_Mod_Name = [] New_Mod_Name = []
for i in range(0,len(Mod_Names)): for i in range(0,len(Mod_Names)):
New_Mod_Name.append(str(Mod_order[i]+10) + '_' + Mod_Names[i]) if(Stats[:4] =='days'):
New_Mod_Name.append(str(Mod_order[i]+10) + '_' + Mod_Names[i][0])
else:
New_Mod_Name.append(str(Mod_order[i]+10) + '_' + Mod_Names[i])
test.columns = New_Mod_Name test.columns = New_Mod_Name
test_sorted = test.reindex_axis(sorted(test.columns), axis=1) test_sorted = test.reindex_axis(sorted(test.columns), axis=1)
colnamest = test.columns colnamest = test.columns
@ -297,6 +310,7 @@ for Est in Estuaries:
fig.patch.set_alpha(ALPHA_figs) fig.patch.set_alpha(ALPHA_figs)
fig.tight_layout() fig.tight_layout()
fig.savefig(png_out_path) fig.savefig(png_out_path)
plt.close()
#=========# #=========#
#==========================================================# #==========================================================#

Loading…
Cancel
Save