CLIMATE-583 - Add portrait diagram support
Project: http://git-wip-us.apache.org/repos/asf/climate/repo Commit: http://git-wip-us.apache.org/repos/asf/climate/commit/c8539d00 Tree: http://git-wip-us.apache.org/repos/asf/climate/tree/c8539d00 Diff: http://git-wip-us.apache.org/repos/asf/climate/diff/c8539d00 Branch: refs/heads/master Commit: c8539d009d1eefe0efa59d4c554f66c95f12928e Parents: f9e13d7 Author: Michael Joyce <[email protected]> Authored: Thu Jun 4 09:50:24 2015 -0700 Committer: Michael Joyce <[email protected]> Committed: Thu Jun 4 14:44:42 2015 -0700 ---------------------------------------------------------------------- ocw-config-runner/configuration_parsing.py | 9 ++++-- ocw-config-runner/example/portrait_diagram.yaml | 30 ++++++++++++++++++++ ocw-config-runner/plot_generation.py | 16 ++++++++++- 3 files changed, 51 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/climate/blob/c8539d00/ocw-config-runner/configuration_parsing.py ---------------------------------------------------------------------- diff --git a/ocw-config-runner/configuration_parsing.py b/ocw-config-runner/configuration_parsing.py index 283a39d..ff853b7 100644 --- a/ocw-config-runner/configuration_parsing.py +++ b/ocw-config-runner/configuration_parsing.py @@ -123,9 +123,9 @@ def _config_is_well_formed(config_data): is_well_formed = False # Ensure that if we're trying to make a plot that require # subregion info that the config has this present. - elif plot['type'] in ['subregion']: + elif plot['type'] in ['subregion', 'portrait']: if ('subregions' not in config_data or - len(config_data['subregions'] < 1)): + len(config_data['subregions']) < 1): logger.error( 'Plot config that requires subregion information is present ' 'in a config file without adequate subregion information ' @@ -240,7 +240,10 @@ def _valid_plot_config_data(plot_config_data): elif plot_type == 'time_series': logger.warn('Time series plots are currently unsupported. Skipping validation') elif plot_type == 'portrait': - logger.warn('Portrait diagrams are currently unsupported. Skipping validation') + required_keys = set([ + 'metric_index', + 'output_name' + ]) else: logger.error('Invalid plot type specified.') return False http://git-wip-us.apache.org/repos/asf/climate/blob/c8539d00/ocw-config-runner/example/portrait_diagram.yaml ---------------------------------------------------------------------- diff --git a/ocw-config-runner/example/portrait_diagram.yaml b/ocw-config-runner/example/portrait_diagram.yaml new file mode 100644 index 0000000..f3e45de --- /dev/null +++ b/ocw-config-runner/example/portrait_diagram.yaml @@ -0,0 +1,30 @@ +evaluation: + temporal_time_delta: 365 + spatial_regrid_lats: !!python/tuple [-40, 40, 1] + spatial_regrid_lons: !!python/tuple [-40, 40, 1] + +datasets: + reference: + data_source: local + file_count: 1 + path: /tmp/AFRICA_KNMI-RACMO2.2b_CTL_ERAINT_MM_50km_1989-2008_tasmax.nc + variable: tasmax + + targets: + - data_source: local + file_count: 1 + path: /tmp/AFRICA_UC-WRF311_CTL_ERAINT_MM_50km-rg_1989-2008_tasmax.nc + variable: tasmax + optional_args: + name: WRF +metrics: + - PatternCorrelation + +plots: + - type: portrait + metric_index: 0 + output_name: portrait_test + +subregions: + - [-10.0, 0.0, 29.0, 36.5] + - [0.0, 10.0, 29.0, 37.5] http://git-wip-us.apache.org/repos/asf/climate/blob/c8539d00/ocw-config-runner/plot_generation.py ---------------------------------------------------------------------- diff --git a/ocw-config-runner/plot_generation.py b/ocw-config-runner/plot_generation.py index 9da97c2..c0bfa03 100644 --- a/ocw-config-runner/plot_generation.py +++ b/ocw-config-runner/plot_generation.py @@ -43,7 +43,7 @@ def plot_from_config(evaluation, config_data): elif plot['type'] == 'time_series': logger.warn('Time series plots are currently unsupported. Skipping ...') elif plot['type'] == 'portrait': - logger.warn('Portrait diagrams are currently unsupported. Skipping ...') + _draw_portrait_diagram(evaluation, plot) else: logger.error('Unrecognized plot type requested: {}'.format(plot['type'])) @@ -104,3 +104,17 @@ def _draw_subregion_diagram(evaluation, plot_config): lons, plot_config['output_name'], **plot_config.get('optional_args', {})) + +def _draw_portrait_diagram(evaluation, plot_config): + """""" + metric_index = plot_config['metric_index'] + + diagram_data = np.array(evaluation.results[:][metric_index][:]) + subregion_names = ["R{}".format(i) for i in range(len(evaluation.subregions))] + target_names = [t.name for t in evaluation.target_datasets] + + plots.draw_portrait_diagram(diagram_data, + target_names, + subregion_names, + fname=plot_config['output_name'], + **plot_config.get('optional_args', {}))
