From af6f51f331feac991206ec68c62f546fd2cbcda1 Mon Sep 17 00:00:00 2001 From: Dan Howe Date: Fri, 20 Jul 2018 08:10:09 +1000 Subject: [PATCH] Scale figures based on beach size --- las_outputs.py | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/las_outputs.py b/las_outputs.py index 2e3aed3..284b2f2 100644 --- a/las_outputs.py +++ b/las_outputs.py @@ -28,6 +28,25 @@ import nielsen_volumes from survey_tools import call_lastools, extract_pts, update_survey_output +def get_datestring(x): + """Format a date integer into an ISO-8601 date string + + Args: + x: integer representation of date string + + Returns: + formatted date string + + Examples: + + >> get_datestring(19700101) + '1970-01-01' + """ + datestr = pd.datetime.strptime(str(x), '%Y%m%d').strftime('%Y-%m-%d') + + return datestr + + def remove_temp_files(directory): for f in os.listdir(directory): os.unlink(os.path.join(directory, f)) @@ -45,20 +64,28 @@ def plot_profiles(profile_name, csv_output_dir, graph_loc, ch_limits, delta_vol) # Find landward limit of profile (behind beach) ch_min = ch_limits.loc[profile_name, 'Landward Limit'] - ax = plt.axes() + # Set figure dimensions based on beach size + vertical_exag = 8 + m_per_inch = 8 + fig_h = profiles.dropna().values.max() / m_per_inch * vertical_exag + fig_w = (profiles.index.max() - ch_min) / m_per_inch + + fig, ax = plt.subplots(figsize=(fig_w, fig_h)) for col in profiles.columns: profile = profiles.loc[ch_min:, col] date_str = col.split('_')[-1] - date = '{}-{}-{}'.format(date_str[:4], date_str[4:6], date_str[6:]) + date = get_datestring(date_str) ax.plot(profile.index, profile, label=date) + ax.set_aspect(vertical_exag) + ax.set_xlabel('Chainage (m)', labelpad=10) ax.set_ylabel('Elevation (m AHD)', labelpad=10) # Show most recent volume change ax.annotate('Most recent\nvolume change:\n{:0.1f} m$^3$/m'.format(delta_vol), - (0.1, 0.15), xycoords='axes fraction', fontsize=8, + (0.05, 0.15), xycoords='axes fraction', fontsize=9, backgroundcolor='#ffffff', linespacing=1.5) ax.legend(edgecolor='none', facecolor='#ffffff', fontsize=9) @@ -91,8 +118,7 @@ def calculate_volumes(profile_name, survey_date, csv_output_dir, ch_limits, volu volumes = pd.DataFrame() # Format dates - date_str = str(survey_date) - date = '{}-{}-{}'.format(date_str[:4], date_str[4:6], date_str[6:]) + date = get_datestring(survey_date) for current_date in profiles.columns: # Get Nielsen erosion volumes @@ -216,7 +242,3 @@ def main(): if __name__ == '__main__': main() - -if True: - plt.plot([], label='label') - plt.legend(facecolor='r')