"""psy-strat psyplot plugin
This module defines the rcParams for the psy-strat plugin. This module will
be imported when psyplot is imported. What is should contain is:
- an rcParams variable as instance of :class:`psyplot.config.rcsetup.RcParams`
that describes the configuration of your plugin
- a get_versions function that returns the version of your plugin and the ones
from its requirements
.. warning::
Because of recursion issues, You have to load the psyplot module before
loading this module! In other words, you have to type
.. code-block:: python
import psyplot
import psy_strat.plugin"""
from psyplot.config.rcsetup import RcParams
from psy_strat import __version__ as plugin_version
from itertools import repeat
from psy_simple.plugin import (
rcParams as psys_rcParams, validate_bool, validate_int, try_and_error,
validate_none, validate_float, validate_str, validate_color,
validate_lineplot, validate_marker, ValidateList, ValidateInStrings)
[docs]def get_versions(requirements=True):
"""Get the versions of psy-strat and it's requirements
Parameters
----------
requirements: bool
If True, the requirements are imported and it's versions are included
"""
ret = {'version': plugin_version}
if requirements:
# insert versions of the requirements, e.g. via
# >>> import requirement
# >>> ret['requirement'] = requirement.__version__
pass
return ret
# -----------------------------------------------------------------------------
# ------------------------- validation functions ------------------------------
# -----------------------------------------------------------------------------
# define your validation functions for the values in the rcParams here. If
# a validation fails, the function should raise a ValueError or TypeError
[docs]def validate_grouper(value):
"""
Validate the grouper formatoption
Parameters
----------
value: tuple (float ``y1``, str ``s``)
A tuple of length 2, where the first parameter ``0<=y1<=1`` determines
the distance of the bar to the top y-axis and the second is the title
of the group
"""
y1, s = value
y1 = validate_float(y1)
s = validate_str(s)
return y1, s
[docs]def validate_axislinestyle(value):
"""Validate a dictionary containing axiscolor definitions
Parameters
----------
value: dict
a mapping from 'left', 'right', 'bottom', 'top' to the linestyle
Returns
-------
dict
Raises
------
ValueError"""
validate = try_and_error(validate_none, validate_str)
possible_keys = {'right', 'left', 'top', 'bottom'}
try:
value = dict(value)
false_keys = set(value) - possible_keys
if false_keys:
raise ValueError("Wrong keys (%s)!" % (', '.join(false_keys)))
for key, val in value.items():
value[key] = validate(val)
except Exception:
value = dict(zip(possible_keys, repeat(validate(value))))
return value
[docs]def validate_hlines(value):
"""Validate the hlines formatoption
Parameters
----------
value: object
Either None, True or a color"""
if value is None:
return value
elif value is True:
return '0.9'
return validate_color(value)
# -----------------------------------------------------------------------------
# ------------------------------ rcParams -------------------------------------
# -----------------------------------------------------------------------------
# define your defaultParams. A mapping from rcParams key to a list of length 3:
#
# 1. the default value
# 2. the validation function of type conversion function
# 3. a short description of the default value
#
# Example::
#
# defaultParams = {'my.key': [True, bool, 'What my key does']}
psys_validate = psys_rcParams.validate
psys_desc = psys_rcParams.descriptions
defaultParams = {
# if you define new plotters, we recommend to assign a specific rcParams
# key for it, e.g.
'plotter.strat.transpose': [
True, psys_validate['plotter.simple.transpose'],
'fmt key to switch x- and y-axis for stratigraphic plots'],
'plotter.strat.title_loc': [
'left', ValidateInStrings('title_loc', ['center', 'left', 'right'],
True)],
'plotter.strat.titleprops': [
{'rotation': 45, 'va': 'bottom', 'ha': 'left',
'bbox': {'facecolor': 'w', 'edgecolor': 'none'}},
psys_validate['plotter.baseplotter.titleprops'],
'The properties of the axes title'],
'plotter.strat.legendlabels': [
'%(name)s', psys_validate['plotter.simple.legendlabels'],
psys_desc['plotter.simple.legendlabels']],
'plotter.strat.legend': [
False, psys_validate['plotter.simple.legend'],
psys_desc['plotter.simple.legend']],
'plotter.strat.titlesize': [
'small',
psys_validate['plotter.baseplotter.titlesize'],
psys_desc['plotter.baseplotter.titlesize']],
'plotter.strat.title': [
'%(name)s',
psys_validate['plotter.baseplotter.title'],
'The axes title'],
'plotter.strat.title_wrap': [
15, validate_int, 'wrap the title after the given amount of characters'
],
'plotter.strat.hlines': [
None, try_and_error(validate_none, validate_grouper),
'Show the measurements'],
'plotter.strat.grouper': [
None, try_and_error(validate_none, validate_grouper),
'Group several plots together using the grouper formatoption'],
'plotter.strat.grouperweight': [
psys_rcParams['plotter.baseplotter.titleweight'],
psys_validate['plotter.baseplotter.titleweight'],
'Set the fontweight of the grouper text'],
'plotter.strat.groupersize': [
psys_rcParams['plotter.baseplotter.titlesize'],
psys_validate['plotter.baseplotter.titlesize'],
'Set the fontsize of the grouper text'],
'plotter.strat.grouperprops': [
{'bbox': {'facecolor': 'w', 'edgecolor': 'none'}},
psys_validate['plotter.baseplotter.titleprops'],
'Set the font properties of the grouper text'],
'plotter.strat.axislinestyle': [
None, validate_axislinestyle,
'The linestyle of the x- and y-axes'],
'plotter.strat.exag_color': [
'0.7', psys_validate['plotter.simple.color'],
'The color for exaggerations'],
'plotter.strat.exag_factor': [
10, validate_float, 'The exaggeration factor'],
'plotter.strat.exag': [
None, validate_lineplot, 'The plotting style for exaggerations'],
'plotter.strat.occurences': [
None, try_and_error(validate_none, validate_float,
ValidateList(float, 2)),
"The range that should be considered as an occurence"],
'plotter.strat.occurence_marker': [
'+', validate_marker, 'The symbol of the marker for occurences'],
'plotter.strat.occurence_value': [
None, try_and_error(validate_none, validate_float,
ValidateList(float)),
'The value to use for an occurence in the plot']
}
# create the rcParams and populate them with the defaultParams. For more
# information on this class, see the :class:`psyplot.config.rcsetup.RcParams`
# class
rcParams = RcParams(defaultParams=defaultParams)
rcParams.update_from_defaultParams()