From 3611d93711f5483a63de0d6e2ad5993c5d7a2de9 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Wed, 12 Jan 2022 11:18:21 +0100 Subject: [PATCH 1/5] Append to transforms possibly already coming out of the chart specs Signed-off-by: F.N. Claessen --- flexmeasures/data/models/charts/defaults.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/flexmeasures/data/models/charts/defaults.py b/flexmeasures/data/models/charts/defaults.py index 10b8d8a84..32626c9c0 100644 --- a/flexmeasures/data/models/charts/defaults.py +++ b/flexmeasures/data/models/charts/defaults.py @@ -50,12 +50,14 @@ def decorated_chart_specs(*args, **kwargs): chart_specs["data"] = {"name": dataset_name} chart_specs["height"] = HEIGHT chart_specs["width"] = WIDTH - chart_specs["transform"] = [ + if "transform" not in chart_specs: + chart_specs["transform"] = [] + chart_specs["transform"].append( { "as": "full_date", "calculate": f"timeFormat(datum.event_start, '{TIME_FORMAT}')", } - ] + ) return chart_specs return decorated_chart_specs From aa7bcbd865a66ef234b3b47bd651a1ee4ae43107 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Wed, 12 Jan 2022 11:22:06 +0100 Subject: [PATCH 2/5] Let chart specs derive title, quantity and unit from Sensor object Signed-off-by: F.N. Claessen --- flexmeasures/data/models/charts/belief_charts.py | 12 +++++++----- flexmeasures/data/models/time_series.py | 5 +---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/flexmeasures/data/models/charts/belief_charts.py b/flexmeasures/data/models/charts/belief_charts.py index 0dea2f611..cf4725cda 100644 --- a/flexmeasures/data/models/charts/belief_charts.py +++ b/flexmeasures/data/models/charts/belief_charts.py @@ -1,18 +1,20 @@ from flexmeasures.data.models.charts.defaults import FIELD_DEFINITIONS +from flexmeasures.utils.flexmeasures_inflection import capitalize -def bar_chart(title: str, quantity: str = "unknown quantity", unit: str = "a.u."): - if not unit: - unit = "a.u." +def bar_chart( + sensor: "Sensor", +): + unit = sensor.unit if sensor.unit else "a.u." event_value_field_definition = dict( - title=f"{quantity} ({unit})", + title=f"{capitalize(sensor.type)} ({unit})", format=".3s", stack=None, **FIELD_DEFINITIONS["event_value"], ) return { "description": "A simple bar chart.", - "title": title, + "title": capitalize(sensor.name), "mark": "bar", "encoding": { "x": FIELD_DEFINITIONS["event_start"], diff --git a/flexmeasures/data/models/time_series.py b/flexmeasures/data/models/time_series.py index 304ae613a..474d5d4c0 100644 --- a/flexmeasures/data/models/time_series.py +++ b/flexmeasures/data/models/time_series.py @@ -28,7 +28,6 @@ from flexmeasures.data.models.generic_assets import GenericAsset from flexmeasures.data.models.validation_utils import check_required_attributes from flexmeasures.utils.time_utils import server_now -from flexmeasures.utils.flexmeasures_inflection import capitalize class Sensor(db.Model, tb.SensorDBMixin, AuthModelMixin): @@ -270,9 +269,7 @@ def chart( ) # todo remove this placeholder when sensor types are modelled chart_specs = chart_type_to_chart_specs( chart_type, - title=capitalize(self.name), - quantity=capitalize(self.sensor_type), - unit=self.unit, + sensor=self, dataset_name=dataset_name, **kwargs, ) From 430cdd15491b2b6f3e0c93fa7f28b82df0e63897 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Wed, 12 Jan 2022 11:22:51 +0100 Subject: [PATCH 3/5] Derive bar width from sensor's event resolution Signed-off-by: F.N. Claessen --- flexmeasures/data/models/charts/belief_charts.py | 9 ++++++++- flexmeasures/data/models/charts/defaults.py | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/flexmeasures/data/models/charts/belief_charts.py b/flexmeasures/data/models/charts/belief_charts.py index cf4725cda..987850049 100644 --- a/flexmeasures/data/models/charts/belief_charts.py +++ b/flexmeasures/data/models/charts/belief_charts.py @@ -3,7 +3,7 @@ def bar_chart( - sensor: "Sensor", + sensor: "Sensor", # noqa F821 ): unit = sensor.unit if sensor.unit else "a.u." event_value_field_definition = dict( @@ -18,6 +18,7 @@ def bar_chart( "mark": "bar", "encoding": { "x": FIELD_DEFINITIONS["event_start"], + "x2": FIELD_DEFINITIONS["event_end"], "y": event_value_field_definition, "color": FIELD_DEFINITIONS["source"], "opacity": {"value": 0.7}, @@ -27,4 +28,10 @@ def bar_chart( FIELD_DEFINITIONS["source"], ], }, + "transform": [ + { + "calculate": f"datum.event_start + {sensor.event_resolution.total_seconds() * 1000}", + "as": "event_end", + }, + ], } diff --git a/flexmeasures/data/models/charts/defaults.py b/flexmeasures/data/models/charts/defaults.py index 32626c9c0..e5d7582cb 100644 --- a/flexmeasures/data/models/charts/defaults.py +++ b/flexmeasures/data/models/charts/defaults.py @@ -16,6 +16,11 @@ type="temporal", title=None, ), + "event_end": dict( + field="event_end", + type="temporal", + title=None, + ), "event_value": dict( field="event_value", type="quantitative", From 683ce54ddedab958740001d8a417e4f0c6d1b70e Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Wed, 12 Jan 2022 15:45:28 +0100 Subject: [PATCH 4/5] Fix attribute call Signed-off-by: F.N. Claessen --- flexmeasures/data/models/charts/belief_charts.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flexmeasures/data/models/charts/belief_charts.py b/flexmeasures/data/models/charts/belief_charts.py index 987850049..f0b71223b 100644 --- a/flexmeasures/data/models/charts/belief_charts.py +++ b/flexmeasures/data/models/charts/belief_charts.py @@ -7,7 +7,7 @@ def bar_chart( ): unit = sensor.unit if sensor.unit else "a.u." event_value_field_definition = dict( - title=f"{capitalize(sensor.type)} ({unit})", + title=f"{capitalize(sensor.sensor_type)} ({unit})", format=".3s", stack=None, **FIELD_DEFINITIONS["event_value"], From db459c32fee32984f29aa0c6513bc018c5fae031 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Wed, 12 Jan 2022 17:29:55 +0100 Subject: [PATCH 5/5] Changelog entry Signed-off-by: F.N. Claessen --- documentation/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/changelog.rst b/documentation/changelog.rst index be9094405..083496ddc 100644 --- a/documentation/changelog.rst +++ b/documentation/changelog.rst @@ -16,6 +16,7 @@ New features Bugfixes ----------- * Fix recording time of schedules triggered by UDI events [see `PR #300 `_] +* Set bar width of bar charts based on sensor resolution [see `PR #310 `_] Infrastructure / Support ----------------------