Skip to content
Snippets Groups Projects
Verified Commit e3c95f9b authored by Owen Graham's avatar Owen Graham
Browse files

Make `Measurement` class more useful

parent ff023208
No related branches found
No related tags found
No related merge requests found
from flask import abort, Flask, g, jsonify, redirect, render_template
from .data import measurements
from .parameters import get_param, year_type
from .plotting import plotters
from .records import get_link, get_station, read_stations
......@@ -30,6 +31,7 @@ def render_plotter(name, embedded):
if plotter is None:
abort(404)
g.embedded = embedded
g.measurements = measurements
g.plotters = plotters
g.plotter = plotter
stations = read_stations()
......
......@@ -11,11 +11,12 @@ from pyld import jsonld
from . import data_spec
from .records import get_link
Measurement = make_dataclass('Measurement', ['url_name', 'field', 'title'])
measurements = {m.url_name: m for m in (
Measurement('temperature', 1, 'Temperature (C)'),
Measurement('pressure', 2, 'Pressure (hPa)'),
Measurement('wind-speed', 3, 'Wind Speed (m/s)'),
Measurement = make_dataclass('Measurement',
['slug', 'field', 'title', 'units'])
measurements = {m.slug: m for m in (
Measurement('temperature', 1, 'Temperature', 'C'),
Measurement('pressure', 2, 'Pressure', 'hPa'),
Measurement('wind-speed', 3, 'Wind Speed', 'm/s'),
)}
# Special JSON property names/values
ACCESS_URL = 'http://www.w3.org/ns/dcat#accessURL'
......
......@@ -44,21 +44,22 @@ class TimeSeries(Plotter):
xmax=data[:, 0][-1],
linestyle='-',
alpha=0.7)
axes.set_ylabel(meas.title)
axes.set_ylabel(f'{meas.title} ({meas.units})')
axes.grid(True)
maximum = max(data, key=lambda row: row[meas.field])
minimum = min(data, key=lambda row: row[meas.field])
axes.set_title(
(f'Max {meas.title}: {maximum[meas.field]}, Date: ({maximum[0]}). '
f'Min {meas.title}: {minimum[meas.field]}, '
(f'Max {meas.title} ({meas.units}): {maximum[meas.field]}, '
f'Date: ({maximum[0]}). '
f'Min {meas.title} ({meas.units}): {minimum[meas.field]}, '
f'Date: ({minimum[0]}).'),
fontsize='small',
)
name = station['name']
plt.suptitle(f'{meas.title} measurements, {name} Station, '
f'{data[0][0].year}')
plt.suptitle(f'{meas.title} ({meas.units}) measurements, '
f'{name} Station, {data[0][0].year}')
return savefig_response(fig, filename=(
f'{cls.name}.{station_id}.{year}.{meas.url_name}.png'
f'{cls.name}.{station_id}.{year}.{meas.slug}.png'
))
......@@ -104,7 +105,7 @@ class Overlay(Plotter):
xmax=datasets[0].data[:, 0][-1],
alpha=0.7,
label=f'Avg {dset.name} {dset.data[0][0].year}')
axes.set_ylabel(meas.title)
axes.set_ylabel(f'{meas.title} ({meas.units})')
for dset in datasets:
dset.max = max(dset.data, key=lambda row: row[meas.field])
......@@ -114,20 +115,21 @@ class Overlay(Plotter):
axes.grid(True)
axes.set_title(
(f'Max {meas.title}: {max_dset.max[meas.field]}, '
(f'Max {meas.title} ({meas.units}): {max_dset.max[meas.field]}, '
f'{max_dset.name} Station, Date: ({max_dset.max[0]}). '
f'Min {meas.title}: {min_dset.min[meas.field]}, '
f'Min {meas.title} ({meas.units}): {min_dset.min[meas.field]}, '
f'{min_dset.name} Station, Date: ({min_dset.min[0]}).'),
fontsize='small')
axes.legend()
axes.tick_params(labelbottom=False)
title_dsets = ' / '.join(f'{dset.name} Station, {dset.data[0][0].year}'
for dset in datasets)
plt.suptitle(f'{meas.title} measurements, {title_dsets}')
plt.suptitle(f'{meas.title} ({meas.units}) measurements, '
f'{title_dsets}')
filename_dsets = '.'.join(f'{dset.station_id}.{dset.year}'
for dset in datasets)
return savefig_response(fig, filename=(
f'{cls.name}.{filename_dsets}.{meas.url_name}.png'
f'{cls.name}.{filename_dsets}.{meas.slug}.png'
))
......@@ -172,19 +174,20 @@ class Boxplot(Plotter):
fig.set_figheight(6)
fig.set_figwidth(12)
axes.boxplot(plot_data, positions=years)
axes.set_ylabel(meas.title)
axes.set_ylabel(f'{meas.title} ({meas.units})')
axes.grid(True)
axes.set_title(
(f'Max {meas.title}: {maximum[meas.field]}, Date: ({maximum[0]}). '
f'Min {meas.title}: {minimum[meas.field]}, '
(f'Max {meas.title} ({meas.units}): {maximum[meas.field]}, '
f'Date: ({maximum[0]}). '
f'Min {meas.title} ({meas.units}): {minimum[meas.field]}, '
f'Date: ({minimum[0]}).'),
fontsize='small',
)
name = station['name']
plt.suptitle(f'{meas.title} measurements, {name} Station, '
f'{start_year} - {end_year}.')
plt.suptitle(f'{meas.title} ({meas.units}) measurements, '
f'{name} Station, {start_year} - {end_year}.')
return savefig_response(fig, filename=(
f'{cls.name}.{station_id}.{year1}.{year2}.{meas.url_name}.png'
f'{cls.name}.{station_id}.{year1}.{year2}.{meas.slug}.png'
))
......
<option value="temperature">Temperature</option>
<option value="pressure">Pressure</option>
<option value="wind-speed">Wind Speed</option>
{% for meas in g.measurements.values() %}
<option value="{{ meas.slug }}">
{{- meas.title -}}
</option>
{% endfor %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment