diff --git a/data_visualisation.py b/data_visualisation.py index 2d86d75df6149c9783373a74e3307c31581d4cff..d8bbb713fdc2a8a8cc6bc69886fca944c0524120 100644 --- a/data_visualisation.py +++ b/data_visualisation.py @@ -57,7 +57,7 @@ df_hydro_sig_45_long = df_hydro_sig_45.melt(id_vars = ['code'], var_name = 'hydr # Watersheds -shp_watersheds_path = 'C:/Users/laura.lindeperg/Documents/DonneesLaura/Watersheds/complete_df_wrong_geometries.shp' +shp_watersheds_path = 'C:/Users/laura.lindeperg/Documents/DonneesLaura/Watersheds/616_Catchments.shp' shp_foldername = 'C:/Users/laura.lindeperg/Documents/DonneesLaura/Watersheds/GEOMETRY/' shp_watersheds = gpd.read_file(shp_watersheds_path) @@ -77,20 +77,19 @@ her_662 = pd.read_csv(her_662_path) # Geol -df_geol_path = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/613_stations_geol_df.csv' +df_geol_path = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/616_stations_geol_df.csv' df_geol = pd.read_csv(df_geol_path) # Geomorpho -df_geomorpho_path = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/DeltaV.csv' +df_geomorpho_path = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/616_stations_geomorpho_df.csv' df_geomorpho = pd.read_csv(df_geomorpho_path) -delta_v = df_geomorpho.loc[:, ['Code', 'DeltaV']].rename(columns = {'Code':'code'}) # Transform in long-form data structure df_hydro_sig = df_hydro_sig.drop(columns = ['name']) df_hydro_sig_long = df_hydro_sig.melt(id_vars = ['code'], var_name = 'hydro_sig') -my_df = pd.merge(df_hydro_sig_long, df_geol, on = 'code', how = 'outer') +my_df = pd.merge(df_hydro_sig_long, df_geomorpho, on = 'code', how = 'outer') # my_df = pd.merge(my_df, delta_v, on = 'code', how = 'outer') @@ -98,23 +97,38 @@ my_df = pd.merge(df_hydro_sig_long, df_geol, on = 'code', how = 'outer') shp_watersheds = shp_watersheds.rename(columns = {'Code':'code'}) my_df = pd.merge(my_df, shp_watersheds, on = 'code', how = 'outer') + + + +# Pick catchments within the rrse list +my_df = my_df.loc[my_df.loc[:, 'code'].isin(rrse_241)==True] + + # Filter border catchments border_catchments = ['A3792010', 'A3902010', 'B4224310', 'B4601010', 'B4631010', 'D0156510', 'O1900010', 'O2620010', 'O6140010', 'U2512010', 'U2542010', 'U2722010','V1000010', 'V1020010'] my_df = my_df.loc[my_df.loc[:, 'code'].isin(border_catchments)==False] # Filter catchments based on their size... size = shp_watersheds.loc[shp_watersheds.loc[:, 'S_km2'] < 5000] -my_df = my_df.loc[my_df.loc[:, 'code'].isin(size.loc[:,'code'])==True] +my_df = my_df.loc[my_df.loc[:, 'code'].isin(size.loc[:,'Code'])==True] # ...and their main geol proportion proportion_geol = df_geol.loc[df_geol.loc[:, 'maingeol_proportion'] > 0.70] my_df = my_df.loc[my_df.loc[:, 'code'].isin(proportion_geol.loc[:,'code'])==True] +# Exculde catchments with weird hydrographs +weird_catchments = pd.DataFrame(np.array(['H6201010', 'L4010710', 'Y1232010']), columns=['Code']) +weird_catchments=weird_catchments.loc[:,'Code'] +my_df = my_df.loc[my_df.loc[:, 'code'].isin(weird_catchments)==False] # # Exclude catchments which disturb scales +outlier_catchments = ['P5404010'] # outlier (value of a_l) in dimensioned version +my_df = my_df.loc[my_df.loc[:,'code'].isin(outlier_catchments) == False] + # outlier_catchments = ['V2814020'] -outlier_catchments = ['V2814020', 'V5045020', 'H4033010', 'S4214010'] +# outlier_catchments = ['V2814020', 'V5045020', 'H4033010', 'S4214010'] # my_df = my_df.loc[my_df.loc[:,'code'].isin(['K6492510', 'V2814020', 'P7041510', 'A9001050', 'H8043310', 'H4033010']) == False] + i = outlier_catchments[3] filename_i = 'watershed_'+i infile_i = open(filename_i, 'rb') @@ -134,7 +148,7 @@ g.fig.autofmt_xdate() ## Discharge timeseries # List of the stations'codes -watershed_code = shp_watersheds.loc[:,'code'] +watershed_code = shp_watersheds.loc[:,'Code'] code_from_rrse = rrse_241.loc[rrse_241.isin(watershed_code) == True] @@ -169,28 +183,49 @@ weird_catchments=weird_catchments.loc[:,'Code'] # no_duplicated = my_df_stations.drop(index_duplicated.index[0]) # Get a sample of them for test -code_for_test = watershed_code.loc[402:] +code_for_test = watershed_code.loc[0:2] # Open stored watershed objects -for i in watershed_code: +# for i in watershed_code: # for i in odd_catchments: -# for i in code_for_test: -# for i in code_from_her: +for i in code_for_test: +# for i in code_from_rrse: # filename_i = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/Object_watershed/watershed_'+i - filename_i = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/Object_watershed/Adim/watershed_adim_'+i # filename_i = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/Object_watershed/watershed_allYears_'+i + # filename_i = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/Object_watershed/Adim_new/watershed_adim_'+i + filename_i = 'C:/Users/laura.lindeperg/Documents/INRAE_2021/CODE/fhysa/Object_watershed/Dim/watershed_dim_'+i infile_i = open(filename_i, 'rb') watershed_i = pickle.load(infile_i) infile_i.close() - timeseries_q_i = watershed_i.hydro_climatic_fluxes.discharge_timeseries + # timeseries_q_i = watershed_i.hydro_climatic_fluxes.discharge_timeseries area = str(watershed_i.contour['S_km2'][0]) - # deleted_years = watershed_i.hydro_climatic_fluxes.Deleted_Hydro_Year - g = sns.relplot(x="Datetime", y="Q", kind="line", data=timeseries_q_i).set(title='watershed '+i+' Area = '+area+ ' km²', ylabel= 'Q [mm/j]') - g.fig.autofmt_xdate() + deleted_years = watershed_i.hydro_climatic_fluxes.deleted_Hydro_Year + entire_timeseries = watershed_i.hydro_climatic_fluxes.entire_q_timeseries + where_removed_year = entire_timeseries['HydroDate'].dt.year.isin(deleted_years) + timeseries_q_i = pd.DataFrame(entire_timeseries) + # timeseries_q_i['Q'] = timeseries_q_i['Q'].mask(where_removed_year) + timeseries_q_i['Q'] = timeseries_q_i['Q'].where(~where_removed_year, np.nan) + removed_years = pd.DataFrame(entire_timeseries['Datetime'].where(where_removed_year)).dropna() + # removed_years = pd.to_datetime(removed_years['Datetime']) + + # g = sns.relplot(x="Datetime", y="Q", kind = 'line', data= timeseries_q_i).set(title='watershed '+i+' Area = '+area+ ' km²', ylabel= 'Q [mm/j]') + # # g = sns.relplot(x="Datetime", y="Q", kind = 'line', data= timeseries_q_i).set(title='watershed '+i+' Area = '+area+ ' km²', ylabel= 'Q/Qmedian') + # plt.vlines(x = removed_years.Datetime, ymin = 0, ymax =timeseries_q_i.Q.max(), color = 'mistyrose') + # g.fig.autofmt_xdate() + + plt.close() + plt.plot(np.array(timeseries_q_i.Datetime), np.array(timeseries_q_i.Q)) + # plt.yscale('log') + plt.vlines(x = removed_years.Datetime, ymin = 0, ymax =timeseries_q_i.Q.max(), color = 'mistyrose') + plt.xlabel('Datetime') + plt.ylabel('Q [mm/j]') + # plt.ylabel('Q/Qmedian') + plt.title(label='watershed '+i+' Area = '+area+ ' km²') + plt.show() - g.savefig('C:/Users/laura.lindeperg/Documents/INRAE_2021/FIGURES/Discharge_timeseries/HER_Stations/discharge_timeseries_HERlist_'+i+'.png', dpi=400, facecolor='w',edgecolor='w', format='png', pad_inches=0.1) + plt.savefig('C:/Users/laura.lindeperg/Documents/INRAE_2021/FIGURES/Discharge_timeseries/Dim/616_Stations/discharge_timeseries_dim_'+i+'.png', dpi=400, facecolor='w',edgecolor='w', format='png', pad_inches=0.1) @@ -200,9 +235,9 @@ geol = df_geol.loc[:, ['code', 'maingeol_description']] my_data = pd.merge(df_hydro_sig_45, geol) # Filtering workflow -my_data = my_data.loc[my_data.loc[:, 'code'].isin(code_from_rrse)==True] +my_data = my_data.loc[my_data.loc[:, 'code'].isin(rrse_241)==True] my_data = my_data.loc[my_data.loc[:, 'code'].isin(border_catchments)==False] -my_data = my_data.loc[my_data.loc[:, 'code'].isin(size.loc[:,'code'])==True] +my_data = my_data.loc[my_data.loc[:, 'code'].isin(size.loc[:,'Code'])==True] my_data = my_data.loc[my_data.loc[:, 'code'].isin(proportion_geol.loc[:,'code'])==True] # my_data = my_data.loc[my_data.loc[:, 'code'].isin(outlier_catchments)==False] my_data = my_data.loc[my_data.loc[:, 'code'].isin(weird_catchments)==False] @@ -230,57 +265,243 @@ nobs = [i for i in nobs] my_df=my_df.sort_values(by=['maingeol_description']) -## Boxplot of the hydrological signatures -figure, axes = plt.subplots(4, 4, figsize = (17, 17)) + + + + +## Scatterplots of the hydrological signatures with extra dimension -> geol or geomorpho indicator parameter + +x_column = 'intermittent_ratio' +y_column = 'value' +define_hue = 'maingeol_description' + + +figure, axes = plt.subplots(2, 3, figsize = (17, 17), sharex = True) +# figure.suptitle('Hydrological signatures') +axes[0, 0].set_title('BFI 5') +axes[0, 1].set_title('BFI 90') +axes[0, 2].set_title('b_l Roques') +axes[1, 0].set_title('tau_l Roques') +axes[1, 1].set_title('tau_l Horner') +axes[1, 2].set_title('FDC slope') +# axes[1, 2].set_title('FDC q90') + + +sns.scatterplot(ax=axes[0, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None, ylabel = None) +sns.scatterplot(ax=axes[0, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']).set(xlabel = None, ylabel = None) +sns.scatterplot(ax=axes[0, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None, ylabel = None) +sns.scatterplot(ax=axes[1, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']).set(ylabel = None) +sns.scatterplot(ax=axes[1, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(ylabel = None) +sns.scatterplot(ax=axes[1, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(ylabel = None) +# sns.scatterplot(ax=axes[1, 2], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None, ylabel = None) +# ax31.set(xlabel = None, ylabel = None) +axes[0,0].legend().set_visible(False) +axes[0,1].legend().set_visible(False) +axes[0,2].legend().set_visible(False) +axes[1,0].legend().set_visible(False) +axes[1,1].legend().set_visible(False) +axes[1,2].legend().set_visible(False) +# axes[1,2].legend().set_visible(False) +# ax31.set_xticklabels('') +# axes[2, 0].axis("off") +# axes[2, 1].axis("off") +# axes[2, 2].axis("off") + +import matplotlib.patches as mpatches + +mont = mpatches.Patch(color=sns.color_palette("deep")[0], label = nb_bv_geol.index[0] + ' - ' + nobs[0]) +socle_aquif = mpatches.Patch(color= sns.color_palette("deep")[1], label = nb_bv_geol.index[1] + ' - ' + nobs[1]) +socle_imper = mpatches.Patch(color= sns.color_palette("deep")[2], label = nb_bv_geol.index[2] + ' - ' + nobs[2]) +socle_semiper = mpatches.Patch(color= sns.color_palette("deep")[3], label = nb_bv_geol.index[3] + ' - ' + nobs[3]) +sedim_aqu_karst = mpatches.Patch(color= sns.color_palette("deep")[4], label = nb_bv_geol.index[4] + ' - ' + nobs[4]) +sedim_aqu_non_karst = mpatches.Patch(color= sns.color_palette("deep")[5], label = nb_bv_geol.index[5] + ' - ' + nobs[5]) +sedim_imper = mpatches.Patch(color= sns.color_palette("deep")[6], label = nb_bv_geol.index[6] + ' - ' + nobs[6]) +sedim_semiper_karst = mpatches.Patch(color= sns.color_palette("deep")[7], label = nb_bv_geol.index[7] + ' - ' + nobs[7]) +sedim_semiper_non_karst = mpatches.Patch(color= sns.color_palette("deep")[8], label = nb_bv_geol.index[8] + ' - ' + nobs[8]) +volc = mpatches.Patch(color= sns.color_palette("deep")[9], label = nb_bv_geol.index[9] + ' - ' + nobs[9]) + +plt.legend(handles=[mont, socle_aquif, socle_imper, socle_semiper, sedim_aqu_karst, sedim_aqu_non_karst, sedim_imper, sedim_semiper_karst, sedim_semiper_non_karst, volc], loc='upper center', bbox_to_anchor=(0.5, -0.05)) + + + + + + + + +## Boxplots of the hydrological signatures with extra dimension -> geol or geomorpho indicator parameter + +x_column = 'maingeol_description' +y_column = 'value' +define_hue = 'maingeol_description' + + +figure, axes = plt.subplots(2, 3, figsize = (17, 17), sharex = True) +# figure.suptitle('Hydrological signatures') +axes[0, 0].set_title('BFI 5') +axes[0, 1].set_title('BFI 90') +axes[0, 2].set_title('b_l Roques') +axes[1, 0].set_title('tau_l Roques') +axes[1, 1].set_title('tau_l Horner') +axes[1, 2].set_title('FDC slope') +# axes[1, 2].set_title('FDC q90') + + +sns.boxplot(ax=axes[0, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None, ylabel = None) +sns.boxplot(ax=axes[0, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']).set(xlabel = None, ylabel = None) +sns.boxplot(ax=axes[0, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None, ylabel = None) +ax10 = sns.boxplot(ax=axes[1, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']).set(xlabel = None, ylabel = None) +sns.boxplot(ax=axes[1, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(xlabel = None, ylabel = None) +sns.boxplot(ax=axes[1, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(xlabel = None, ylabel = None) +# sns.scatterplot(ax=axes[1, 2], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None, ylabel = None) +# ax31.set(xlabel = None, ylabel = None) +# axes[0,0].legend().set_visible(False) +# axes[0,1].legend().set_visible(False) +# axes[0,2].legend().set_visible(False) +# axes[1,0].legend().set_visible(False) +# axes[1,1].legend().set_visible(False) +# axes[1,2].legend().set_visible(False) +# axes[1,2].legend().set_visible(False) + +# axes[1,2].set(xlabel = None, ylabel = None) +# axes[1,0].set_xticklabels('') +# axes[1,1].set_xticklabels('') +axes[1,2].set_xticklabels('') +# axes[2, 0].axis("off") +# axes[2, 1].axis("off") +# axes[2, 2].axis("off") + +import matplotlib.patches as mpatches + +mont = mpatches.Patch(color=sns.color_palette("deep")[0], label = nb_bv_geol.index[0] + ' - ' + nobs[0]) +socle_aquif = mpatches.Patch(color= sns.color_palette("deep")[1], label = nb_bv_geol.index[1] + ' - ' + nobs[1]) +socle_imper = mpatches.Patch(color= sns.color_palette("deep")[2], label = nb_bv_geol.index[2] + ' - ' + nobs[2]) +socle_semiper = mpatches.Patch(color= sns.color_palette("deep")[3], label = nb_bv_geol.index[3] + ' - ' + nobs[3]) +sedim_aqu_karst = mpatches.Patch(color= sns.color_palette("deep")[4], label = nb_bv_geol.index[4] + ' - ' + nobs[4]) +sedim_aqu_non_karst = mpatches.Patch(color= sns.color_palette("deep")[5], label = nb_bv_geol.index[5] + ' - ' + nobs[5]) +sedim_imper = mpatches.Patch(color= sns.color_palette("deep")[6], label = nb_bv_geol.index[6] + ' - ' + nobs[6]) +sedim_semiper_karst = mpatches.Patch(color= sns.color_palette("deep")[7], label = nb_bv_geol.index[7] + ' - ' + nobs[7]) +sedim_semiper_non_karst = mpatches.Patch(color= sns.color_palette("deep")[8], label = nb_bv_geol.index[8] + ' - ' + nobs[8]) +volc = mpatches.Patch(color= sns.color_palette("deep")[9], label = nb_bv_geol.index[9] + ' - ' + nobs[9]) + +plt.legend(handles=[mont, socle_aquif, socle_imper, socle_semiper, sedim_aqu_karst, sedim_aqu_non_karst, sedim_imper, sedim_semiper_karst, sedim_semiper_non_karst, volc], loc='upper center', bbox_to_anchor=(0.5, -0.05)) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Scatterplots of the hydrological signatures with extra dimension -> geol or geomorpho indicator parameter + +x_column = 'ks' +y_column = 'value' +define_hue = 'maingeol_description' + + +figure, axes = plt.subplots(4, 4, figsize = (17, 17), sharex = True) # figure.suptitle('Hydrological signatures') axes[0, 0].set_title('Qmean') axes[0, 1].set_title('Aridity ratio') axes[0, 2].set_title('Runoff ratio') axes[0, 3].set_title('BFI 5') -axes[1, 0].set_title('BF magni') -axes[1, 1].set_title('a_q') -axes[1, 2].set_title('b_q') -axes[1, 3].set_title('FDC q10') -axes[2, 0].set_title('FDC q90') -axes[2, 1].set_title('FDC slope') -axes[2, 2].set_title('tau 1') -axes[2, 3].set_title('tau 2') -axes[3, 0].set_title('tau Roques') -axes[3, 1].set_title('BFI 90') - -sns.boxplot(ax=axes[0, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'q_mean']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[0, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'aridity_ratio']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[0, 2], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'runoff_ratio']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[0, 3], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[1, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bf_magni']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[1, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'a_q']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[1, 2], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[1, 3], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile10']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[2, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[2, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[2, 2], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_1']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[2, 3], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[3, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']).set(xlabel = None, xticks=[]) -sns.boxplot(ax=axes[3, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']).set(xlabel = None, xticks=[]) - +axes[1, 0].set_title('BFI 90') +axes[1, 1].set_title('BF magni') +axes[1, 2].set_title('a_l Roques') +axes[1, 3].set_title('b_l Roques') +axes[2, 0].set_title('FDC q10') +axes[2, 1].set_title('FDC q90') +axes[2, 2].set_title('FDC slope') +axes[2, 3].set_title('tau_e Horner') +axes[3, 0].set_title('tau_l Horner ') +axes[3, 1].set_title('tau_l Roques') + +ax00 = sns.scatterplot(ax=axes[0, 0], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'q_mean']).set(xlabel = None, ylabel = None) +ax01 = sns.scatterplot(ax=axes[0, 1], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'aridity_ratio']).set(xlabel = None, ylabel = None) +ax02 = sns.scatterplot(ax=axes[0, 2], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'runoff_ratio']).set(xlabel = None, ylabel = None) +ax03 = sns.scatterplot(ax=axes[0, 3], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None, ylabel = None) +ax10 = sns.scatterplot(ax=axes[1, 0], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']).set(xlabel = None, ylabel = None) +ax11 = sns.scatterplot(ax=axes[1, 1], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bf_magni']).set(xlabel = None, ylabel = None) +ax12 = sns.scatterplot(ax=axes[1, 2], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'a_q']).set(xlabel = None, ylabel = None) +ax13 = sns.scatterplot(ax=axes[1, 3], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None, ylabel = None) +ax20 = sns.scatterplot(ax=axes[2, 0], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile10']).set(xlabel = None, ylabel = None) +ax21 = sns.scatterplot(ax=axes[2, 1], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None, ylabel = None) +ax22 = sns.scatterplot(ax=axes[2, 2], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(xlabel = None, ylabel = None) +ax23 = sns.scatterplot(ax=axes[2, 3], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_1']).set(xlabel = None, ylabel = None) +ax30 = sns.scatterplot(ax=axes[3, 0], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(xlabel = None, ylabel = None) +ax31 = sns.scatterplot(ax=axes[3, 1], x=x_column, y=y_column, hue = define_hue, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']) +ax31.set(xlabel = None, ylabel = None) +axes[0,0].legend().set_visible(False) +axes[0,1].legend().set_visible(False) +axes[0,2].legend().set_visible(False) +axes[0,3].legend().set_visible(False) +axes[1,0].legend().set_visible(False) +axes[1,1].legend().set_visible(False) +axes[1,2].legend().set_visible(False) +axes[1,3].legend().set_visible(False) +axes[2,0].legend().set_visible(False) +axes[2,1].legend().set_visible(False) +axes[2,2].legend().set_visible(False) +axes[2,3].legend().set_visible(False) +axes[3,0].legend().set_visible(False) +axes[3,1].legend().set_visible(False) +# ax31.set_xticklabels('') axes[3, 2].axis("off") axes[3, 3].axis("off") +import matplotlib.patches as mpatches + +mont = mpatches.Patch(color=sns.color_palette("deep")[0], label = nb_bv_geol.index[0] + ' - ' + nobs[0]) +socle_aquif = mpatches.Patch(color= sns.color_palette("deep")[1], label = nb_bv_geol.index[1] + ' - ' + nobs[1]) +socle_imper = mpatches.Patch(color= sns.color_palette("deep")[2], label = nb_bv_geol.index[2] + ' - ' + nobs[2]) +socle_semiper = mpatches.Patch(color= sns.color_palette("deep")[3], label = nb_bv_geol.index[3] + ' - ' + nobs[3]) +sedim_aqu_karst = mpatches.Patch(color= sns.color_palette("deep")[4], label = nb_bv_geol.index[4] + ' - ' + nobs[4]) +sedim_aqu_non_karst = mpatches.Patch(color= sns.color_palette("deep")[5], label = nb_bv_geol.index[5] + ' - ' + nobs[5]) +sedim_imper = mpatches.Patch(color= sns.color_palette("deep")[6], label = nb_bv_geol.index[6] + ' - ' + nobs[6]) +sedim_semiper_karst = mpatches.Patch(color= sns.color_palette("deep")[7], label = nb_bv_geol.index[7] + ' - ' + nobs[7]) +sedim_semiper_non_karst = mpatches.Patch(color= sns.color_palette("deep")[8], label = nb_bv_geol.index[8] + ' - ' + nobs[8]) +volc = mpatches.Patch(color= sns.color_palette("deep")[9], label = nb_bv_geol.index[9] + ' - ' + nobs[9]) + +plt.legend(handles=[mont, socle_aquif, socle_imper, socle_semiper, sedim_aqu_karst, sedim_aqu_non_karst, sedim_imper, sedim_semiper_karst, sedim_semiper_non_karst, volc]) + + + + + -## Boxplot of the hydrological signatures from their main hydrogeologic type perspective -my_palette = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '9467bd', '8c564b', 'e377c2', '7f7f7f', 'bcbd22', '17becf'] -sns_palette_default = [(0.12156862745098039, 0.4666666666666667, 0.7058823529411765), - (1.0, 0.4980392156862745, 0.054901960784313725), - (0.17254901960784313, 0.6274509803921569, 0.17254901960784313), - (0.8392156862745098, 0.15294117647058825, 0.1568627450980392), - (0.5803921568627451, 0.403921568627451, 0.7411764705882353), - (0.5490196078431373, 0.33725490196078434, 0.29411764705882354), - (0.8901960784313725, 0.4666666666666667, 0.7607843137254902), - (0.4980392156862745, 0.4980392156862745, 0.4980392156862745), - (0.7372549019607844, 0.7411764705882353, 0.13333333333333333), - (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)] + + +## Boxplots of the hydrological signatures with extra dimension -> maingeol_description parameter + + +x_column = 'maingeol_description' +y_column = 'value' +define_hue = 'maingeol-description' figure, axes = plt.subplots(4, 4, figsize = (17, 17), sharex = True) @@ -289,61 +510,62 @@ axes[0, 0].set_title('Qmean') axes[0, 1].set_title('Aridity ratio') axes[0, 2].set_title('Runoff ratio') axes[0, 3].set_title('BFI 5') -axes[1, 0].set_title('BF magni') -axes[1, 1].set_title('a_q') -axes[1, 2].set_title('b_q') -axes[1, 3].set_title('FDC q10') -axes[2, 0].set_title('FDC q90') -axes[2, 1].set_title('FDC slope') -axes[2, 2].set_title('tau 1') -axes[2, 3].set_title('tau 2') -axes[3, 0].set_title('tau Roques') -axes[3, 1].set_title('BFI 90') - -ax00 = sns.boxplot(ax=axes[0, 0], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'q_mean']) -ax01 = sns.boxplot(ax=axes[0, 1], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'aridity_ratio']).set(xlabel = None) -ax02 = sns.boxplot(ax=axes[0, 2], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'runoff_ratio']).set(xlabel = None) -ax03 = sns.boxplot(ax=axes[0, 3], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None) -ax10 = sns.boxplot(ax=axes[1, 0], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bf_magni']).set(xlabel = None) -ax11 = sns.boxplot(ax=axes[1, 1], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'a_q']).set(xlabel = None) -ax12 = sns.boxplot(ax=axes[1, 2], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None) -ax13 = sns.boxplot(ax=axes[1, 3], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile10']).set(xlabel = None) -ax20 = sns.boxplot(ax=axes[2, 0], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None) -ax21 = sns.boxplot(ax=axes[2, 1], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(xlabel = None) -ax22 = sns.boxplot(ax=axes[2, 2], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_1']).set(xlabel = None) -ax23 = sns.boxplot(ax=axes[2, 3], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(xlabel = None) -ax30 = sns.boxplot(ax=axes[3, 0], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']).set(xlabel = None) -ax31 = sns.boxplot(ax=axes[3, 1], x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']) -ax31.set(xlabel = None) +axes[1, 0].set_title('BFI 90') +axes[1, 1].set_title('BF magni') +axes[1, 2].set_title('a_l Roques') +axes[1, 3].set_title('b_l Roques') +axes[2, 0].set_title('FDC q10') +axes[2, 1].set_title('FDC q90') +axes[2, 2].set_title('FDC slope') +axes[2, 3].set_title('tau_e Horner') +axes[3, 0].set_title('tau_l Horner ') +axes[3, 1].set_title('tau_l Roques') + +ax00 = sns.boxplot(ax=axes[0, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'q_mean']).set(xlabel = None, ylabel = None) +ax01 = sns.boxplot(ax=axes[0, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'aridity_ratio']).set(xlabel = None, ylabel = None) +ax02 = sns.boxplot(ax=axes[0, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'runoff_ratio']).set(xlabel = None, ylabel = None) +ax03 = sns.boxplot(ax=axes[0, 3], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None, ylabel = None) +ax10 = sns.boxplot(ax=axes[1, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']).set(xlabel = None, ylabel = None) +ax11 = sns.boxplot(ax=axes[1, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bf_magni']).set(xlabel = None, ylabel = None) +ax12 = sns.boxplot(ax=axes[1, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'a_q']).set(xlabel = None, ylabel = None) +ax13 = sns.boxplot(ax=axes[1, 3], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None, ylabel = None) +ax20 = sns.boxplot(ax=axes[2, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile10']).set(xlabel = None, ylabel = None) +ax21 = sns.boxplot(ax=axes[2, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None, ylabel = None) +ax22 = sns.boxplot(ax=axes[2, 2], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(xlabel = None, ylabel = None) +ax23 = sns.boxplot(ax=axes[2, 3], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_1']).set(xlabel = None, ylabel = None) +ax30 = sns.boxplot(ax=axes[3, 0], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(xlabel = None, ylabel = None) +ax31 = sns.boxplot(ax=axes[3, 1], x=x_column, y=y_column, data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']) +ax31.set(xlabel = None, ylabel = None) +ax31.set_xticklabels('') axes[3, 2].axis("off") axes[3, 3].axis("off") -# Add it to the plot -pos = range(len(nobs)) -# for tick,label in zip(pos,ax31.get_xticklabels()): -for tick,label in zip(pos,nb_bv_geol.index): - ax00.text(pos[tick], - 6, - nobs[tick], - horizontalalignment='center', - fontsize='x-small', - color='black', - fontweight='semibold') +# # Add it to the plot +# pos = range(len(nobs)) +# # for tick,label in zip(pos,ax31.get_xticklabels()): +# for tick,label in zip(pos,nb_bv_geol.index): +# ax00.text(pos[tick], +# 6, +# nobs[tick], +# horizontalalignment='center', +# fontsize='x-small', +# color='black', +# fontweight='semibold') # legend import matplotlib.patches as mpatches -mont = mpatches.Patch(color=sns.color_palette("deep")[0], label = nb_bv_geol.index[0]) -socle_aquif = mpatches.Patch(color= sns.color_palette("deep")[1], label = nb_bv_geol.index[1]) -socle_imper = mpatches.Patch(color= sns.color_palette("deep")[2], label = nb_bv_geol.index[2]) -socle_semiper = mpatches.Patch(color= sns.color_palette("deep")[3], label = nb_bv_geol.index[3]) -sedim_aqu_karst = mpatches.Patch(color= sns.color_palette("deep")[4], label = nb_bv_geol.index[4]) -sedim_aqu_non_karst = mpatches.Patch(color= sns.color_palette("deep")[5], label = nb_bv_geol.index[5]) -sedim_imper = mpatches.Patch(color= sns.color_palette("deep")[6], label = nb_bv_geol.index[6]) -sedim_semiper_karst = mpatches.Patch(color= sns.color_palette("deep")[7], label = nb_bv_geol.index[7]) -sedim_semiper_non_karst = mpatches.Patch(color= sns.color_palette("deep")[8], label = nb_bv_geol.index[8]) -volc = mpatches.Patch(color= sns.color_palette("deep")[9], label = nb_bv_geol.index[9]) +mont = mpatches.Patch(color=sns.color_palette("deep")[0], label = nb_bv_geol.index[0] + ' - ' + nobs[0]) +socle_aquif = mpatches.Patch(color= sns.color_palette("deep")[1], label = nb_bv_geol.index[1] + ' - ' + nobs[1]) +socle_imper = mpatches.Patch(color= sns.color_palette("deep")[2], label = nb_bv_geol.index[2] + ' - ' + nobs[2]) +socle_semiper = mpatches.Patch(color= sns.color_palette("deep")[3], label = nb_bv_geol.index[3] + ' - ' + nobs[3]) +sedim_aqu_karst = mpatches.Patch(color= sns.color_palette("deep")[4], label = nb_bv_geol.index[4] + ' - ' + nobs[4]) +sedim_aqu_non_karst = mpatches.Patch(color= sns.color_palette("deep")[5], label = nb_bv_geol.index[5] + ' - ' + nobs[5]) +sedim_imper = mpatches.Patch(color= sns.color_palette("deep")[6], label = nb_bv_geol.index[6] + ' - ' + nobs[6]) +sedim_semiper_karst = mpatches.Patch(color= sns.color_palette("deep")[7], label = nb_bv_geol.index[7] + ' - ' + nobs[7]) +sedim_semiper_non_karst = mpatches.Patch(color= sns.color_palette("deep")[8], label = nb_bv_geol.index[8] + ' - ' + nobs[8]) +volc = mpatches.Patch(color= sns.color_palette("deep")[9], label = nb_bv_geol.index[9] + ' - ' + nobs[9]) plt.legend(handles=[mont, socle_aquif, socle_imper, socle_semiper, sedim_aqu_karst, sedim_aqu_non_karst, sedim_imper, sedim_semiper_karst, sedim_semiper_non_karst, volc]) @@ -352,6 +574,11 @@ plt.legend(handles=[mont, socle_aquif, socle_imper, socle_semiper, sedim_aqu_kar + + + + + figure.legend([ax01.legend], # List of the line objects labels= nb_bv_geol.index, # The labels for each line #loc='best', # Position of the legend @@ -365,6 +592,13 @@ sns.boxplot(x='maingeol_description', y='value', data=my_df.loc[my_df.loc[:, 'hy + + + + + + + ## Scatterplot - geographic repartition figure, axes = plt.subplots(4, 4, figsize = (17, 17)) figure.suptitle('Hydrological signatures') @@ -411,6 +645,45 @@ sns.boxplot(x='maingeol_description', y='DeltaV', data=my_df.loc[my_df.loc[:, 'h +## Boxplots of the hydrological signatures + +figure, axes = plt.subplots(4, 4, figsize = (17, 17)) +# figure.suptitle('Hydrological signatures') +axes[0, 0].set_title('Qmean') +axes[0, 1].set_title('Aridity ratio') +axes[0, 2].set_title('Runoff ratio') +axes[0, 3].set_title('BFI 5') +axes[1, 0].set_title('BF magni') +axes[1, 1].set_title('a_q') +axes[1, 2].set_title('b_q') +axes[1, 3].set_title('FDC q10') +axes[2, 0].set_title('FDC q90') +axes[2, 1].set_title('FDC slope') +axes[2, 2].set_title('tau 1') +axes[2, 3].set_title('tau 2') +axes[3, 0].set_title('tau Roques') +axes[3, 1].set_title('BFI 90') + +sns.boxplot(ax=axes[0, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'q_mean']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[0, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'aridity_ratio']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[0, 2], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'runoff_ratio']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[0, 3], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_5']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[1, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bf_magni']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[1, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'a_q']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[1, 2], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'b_q']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[1, 3], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile10']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[2, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_quantile90']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[2, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'fdc_slope']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[2, 2], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_1']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[2, 3], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_2']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[3, 0], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'tau_roques']).set(xlabel = None, xticks=[]) +sns.boxplot(ax=axes[3, 1], x='hydro_sig', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'bfi_90']).set(xlabel = None, xticks=[]) + +axes[3, 2].axis("off") +axes[3, 3].axis("off") + + + @@ -418,11 +691,23 @@ sns.boxplot(x='maingeol_description', y='DeltaV', data=my_df.loc[my_df.loc[:, 'h +## En vrac - ne fonctionne pas toujours +# ## Boxplot of the hydrological signatures from their main hydrogeologic type perspective +# my_palette = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '9467bd', '8c564b', 'e377c2', '7f7f7f', 'bcbd22', '17becf'] +# sns_palette_default = [(0.12156862745098039, 0.4666666666666667, 0.7058823529411765), +# (1.0, 0.4980392156862745, 0.054901960784313725), +# (0.17254901960784313, 0.6274509803921569, 0.17254901960784313), +# (0.8392156862745098, 0.15294117647058825, 0.1568627450980392), +# (0.5803921568627451, 0.403921568627451, 0.7411764705882353), +# (0.5490196078431373, 0.33725490196078434, 0.29411764705882354), +# (0.8901960784313725, 0.4666666666666667, 0.7607843137254902), +# (0.4980392156862745, 0.4980392156862745, 0.4980392156862745), +# (0.7372549019607844, 0.7411764705882353, 0.13333333333333333), +# (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)] -# En vrac - ne fonctionne pas toujours sns.relplot(x='value', y='value', data=my_df.loc[my_df.loc[:, 'hydro_sig'] == 'a_q'])