Draft: Runoff Duration Hydrograph Plotting
This was also fairly straightforward (which is good) due to leveraging of the previous functionality for regular streamflow duration hydrographs.
Same story as !27 with some refactoring to provide convenience functions
plot_runoff_duration_hydrograph that provide relevant default axes labels and wrap a core function
Functional demo workflow
Need to figure out how to work up nicer examples and documentation. The below code works using the test "demo_weights.json" data.
# load weights matrix weights = pd.read_json("demo_weights.json") # get list of sites in MN geometry with non-zero weights site_list = hyswap.runoff.identify_sites_from_weights("MN", weights) # loop to construct df_list by fetching NWIS data and calculating runoff values df_list =  for site in site_list: # get site info info_df, _ = dataretrieval.nwis.get_info(sites=site) # convert drainage area from sq mi to sq km da = info_df['drain_area_va'] * 2.58998811 # get streamflow data dv_df, _ = dataretrieval.nwis.get_dv( sites=site, parameterCd='00060', startDT='2000-01-01', endDT='2010-02-01' ) # calculate runoff ro_df = hyswap.runoff.streamflow_to_runoff( dv_df, '00060_Mean', da, frequency='daily') # append to df_list df_list.append(ro_df) # calculate the area-weighted runoff runoff = hyswap.runoff.calculate_geometric_runoff( "MN", df_list, weights) # convert to data frame runoff_df = runoff.to_frame(name='runoff') # calculate daily percentile thresholds pdf = hyswap.percentiles.calculate_variable_percentile_thresholds_by_day( runoff_df, data_column_name='runoff') # identify runoff values from the target year (to be plotted) runoff_year = runoff_df[runoff_df.index.year == 2009] # make the plot fig, ax = plt.subplots(figsize=(10, 6)) ax = hyswap.plots.plot_duration_hydrograph( pdf, runoff_year, 'runoff', 'index_doy', ax=ax, data_label='2009' )
This builds off of !27