#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Tag your plot with an ID. For publishing the tagged plot along your research data have a look at the module publish. Functions: TagPlot(figure object, string) -> list """ import warnings from plotoptions import PlotOptions from tagplot_matplotlib import tagplot_matplotlib def tagplot(figs, engine, prefix='', id_method=1, location='east'): """ Tag your figure/plot with an ID. After determining the plot engine, TagPlot calls the corresponding function which tags the plot. Parameters ---------- figs : list Figures that should be tagged. engine : string Plot engine which should be used to tag the plot. prefix : string Will be added as prefix to the ID. id_method : int, optional id_method for creating the ID. Create an ID by Unix time is referenced as 1, create a random ID with id_method=2. The default is 1. location : string, optional Location for ID to be displayed on the plot. Default is 'east'. Raises ------ RuntimeWarning DESCRIPTION. Returns ------- list The resulting list contains two lists each with as many entries as figures were given. The first list contains the tagged figures. The second list contains the corresponding IDs as strings. """ if isinstance(location, str): pass else: raise TypeError("Location is not a string.") match location: case 'north': rotation = 0 position = (0.35, 0.975) case 'east': rotation = 90 position = (0.975, 0.35) case 'south': rotation = 0 position = (0.35, 0.015) case 'west': rotation = 90 position = (0.025, 0.35) case 'southeast': rotation = 0 position = (0.75, 0.015) case 'custom': # TODO: Get rotation and position from user input & check if valid rotation = 0 position = (0.5, 0.5) case _: warnings.warn(f'Location "{location}" is not a defined ' 'location, TagPlot uses location "east" ' 'instead.') rotation = 90 position = (0.975, 0.35) option_container = PlotOptions(figs, prefix, id_method, rotation, position) option_container.validate_input() match engine: case 'matplotlib' | 'pyplot': return tagplot_matplotlib(option_container) case _: raise ValueError( f'The plot engine "{engine}" is not supported.')