# Draft: Runoff duration hydrograph plotter

##
*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_duration_hydrograph`

and `plot_runoff_duration_hydrograph`

that provide relevant default axes labels and wrap a core function `_base_duration_plotter`

.

## 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'][0] * 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