Source code for colour.plotting.graph

# -*- coding: utf-8 -*-
"""
Automatic Colour Conversion Graph Plotting
==========================================

Defines the automatic colour conversion graph plotting objects:

-   :func:`colour.plotting.plot_automatic_colour_conversion_graph`
"""

from __future__ import division

from colour.graph import CONVERSION_GRAPH, CONVERSION_GRAPH_NODE_LABELS
from colour.utilities import is_networkx_installed

if is_networkx_installed():  # pragma: no cover
    import networkx as nx

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

__all__ = ['plot_automatic_colour_conversion_graph']


[docs]def plot_automatic_colour_conversion_graph(filename, prog='fdp', args=''): """ Plots *Colour* automatic colour conversion graph using `Graphviz <https://www.graphviz.org/>`_ and `pyraphviz <https://pygraphviz.github.io>`_. Parameters ---------- filename : unicode Filename to use to save the image. prog : unicode, optional {'neato', 'dot', 'twopi', 'circo', 'fdp', 'nop'}, *Graphviz* layout method. args : unicode, optional Additional arguments for *Graphviz*. Returns ------- AGraph *Pyraphviz* graph. Notes ----- - This definition does not directly plot the *Colour* automatic colour conversion graph but instead write it to an image. Examples -------- >>> import tempfile >>> import colour >>> from colour import read_image >>> from colour.plotting import plot_image >>> filename = '{0}.png'.format(tempfile.mkstemp()[-1]) >>> _ = plot_automatic_colour_conversion_graph(filename, 'dot') ... # doctest: +SKIP >>> plot_image(read_image(filename)) # doctest: +SKIP .. image:: ../_static/Plotting_Plot_Colour_Automatic_Conversion_Graph.png :align: center :alt: plot_automatic_colour_conversion_graph """ if is_networkx_installed(raise_exception=True): # pragma: no cover agraph = nx.nx_agraph.to_agraph(CONVERSION_GRAPH) for node in agraph.nodes(): node.attr.update(label=CONVERSION_GRAPH_NODE_LABELS[node.name]) agraph.node_attr.update( style='filled', shape='circle', color='#2196F3FF', fillcolor='#2196F370', fontname='Helvetica', fontcolor="#263238") agraph.edge_attr.update(color='#26323870') for node in ('CIE XYZ', 'RGB', 'Spectral Distribution'): agraph.get_node(node.lower()).attr.update( shape='doublecircle', color='#673AB7FF', fillcolor='#673AB770', fontsize=30) for node in ('ATD95', 'CAM16', 'CIECAM02', 'Hunt', 'LLAB', 'Nayatani95', 'RLAB'): agraph.get_node(node.lower()).attr.update( color='#00BCD4FF', fillcolor='#00BCD470') agraph.draw(filename, prog=prog, args=args) return agraph