#!/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']
[docs]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)