colour.plotting.characterisation — Colour 0.3.0 documentation

# Source code for colour.plotting.characterisation

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    """
    Characterisation Plotting
    =========================

    Defines the characterisation plotting objects:

    -   :func:`colour_checker_plot`
    """

    from __future__ import division

    import matplotlib
    import matplotlib.pyplot
    import numpy as np
    import pylab

    from colour.characterisation import COLOURCHECKERS
    from colour.models import RGB_COLOURSPACES
    from colour.models import xyY_to_XYZ, XYZ_to_sRGB
    from colour.plotting import (
        aspect,
        bounding_box,
        display,
        colour_parameter,
        multi_colour_plot)

    __author__ = 'Colour Developers'
    __copyright__ = 'Copyright (C) 2013 - 2014 - Colour Developers'
    __license__ = 'New BSD License - http://opensource.org/licenses/BSD-3-Clause'
    __maintainer__ = 'Colour Developers'
    __email__ = 'colour-science@googlegroups.com'
    __status__ = 'Production'

    __all__ = ['colour_checker_plot']

    def colour_checker_plot(colour_checker='ColorChecker 2005', **kwargs):
        """
        Plots given colour checker.

        Parameters
        ----------
        colour_checker : unicode, optional
            Color checker name.
        \*\*kwargs : \*\*
            Keywords arguments.

        Returns
        -------
        bool
            Definition success.

        Raises
        ------
        KeyError
            If the given colour rendition chart is not found in the factory colour
            rendition charts.

        Examples
        --------
        >>> colour_checker_plot()  # doctest: +SKIP
        True
        """

        colour_checker, name = COLOURCHECKERS.get(colour_checker), colour_checker
        if colour_checker is None:
            raise KeyError(
                ('Colour checker "{0}" not found in '
                 'factory colour checkers: "{1}".').format(
                    name, sorted(COLOURCHECKERS.keys())))

        _, data, illuminant = colour_checker
        colour_parameters = []
        for index, label, x, y, Y in data:
            XYZ = xyY_to_XYZ((x, y, Y))
            RGB = XYZ_to_sRGB(XYZ, illuminant)

            colour_parameters.append(
                colour_parameter(label.title(), np.clip(np.ravel(RGB), 0, 1)))

        background_colour = '0.1'
        matplotlib.pyplot.gca().patch.set_facecolor(background_colour)

        width = height = 1.0
        spacing = 0.25
        across = 6

        settings = {'standalone': False,
                    'width': width,
                    'height': height,
                    'spacing': spacing,
                    'across': across,
                    'text_size': 8,
                    'margins': [-0.125, 0.125, -0.5, 0.125]}
        settings.update(kwargs)

        multi_colour_plot(colour_parameters, **settings)

        text_x = width * (across / 2) + (across * (spacing / 2)) - spacing / 2
        text_y = -(len(colour_parameters) / across + spacing / 2)

        pylab.text(text_x,
                   text_y,
                   '{0} - {1} - Colour Rendition Chart'.format(
                       name, RGB_COLOURSPACES.get('sRGB').name),
                   color='0.95',
                   clip_on=True,
                   ha='center')

        settings.update({'title': name,
                         'facecolor': background_colour,
                         'edgecolor': None,
                         'standalone': True})

        bounding_box(**settings)
        aspect(**settings)

        return display(**settings)