Draft: Cumulative runoff plotter
Draft: Cumulative Runoff Hydrograph Plotting
This ended up being fairly straightforward when leveraging the previous functionality for making cumulative hydrographs.
I am doing some refactoring of the plotting functions to split out the core functionality from plot_cumulative_hydrograph
into a function _base_cumulative_plotter
that is wrapped and called by both plot_cumulative_hydrograph
and the new plot_cumulative_runoff_hydrograph
that are essentially convenience functions with appropriate default axes labels.
Functional demo workflow
Need to work up some sort of examples and documentation for the cumulative runoff hydrograph, the below code works using the test "demo_weights.json" data. The involved portion is the fetching of data and calculation of runoff to create the list of dataframes, and this is probably where having a multitude of examples covering difference cases, averaging schemes, and runoff calculations will be useful.
# 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)
# calculate the cumulative yearly values (same as what we do for streamflow)
cdf = hyswap.cumulative.calculate_daily_cumulative_values(
runoff_df, "runoff")
# make the plot
fig, ax = plt.subplots(figsize=(12, 6))
ax = hyswap.plots.plot_cumulative_runoff_hydrograph(cdf, 2009, ax=ax,
min_pct=True,
max_pct=True)
This builds off of !26 (merged)