Source code for colour.plotting.phenomenon

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

"""
Optical Phenomenon Plotting
===========================

Defines the optical phenomenons plotting objects:

-   :func:`rayleigh_scattering_spd_plot`
-   :func:`the_blue_sky_plot`
"""

from __future__ import division

import matplotlib.pyplot

from colour.algebra import normalise
from colour.colorimetry import spectral_to_XYZ
from colour.models import XYZ_to_sRGB
from colour.phenomenons import rayleigh_scattering_spd
from colour.phenomenons.rayleigh import (
    STANDARD_CO2_CONCENTRATION,
    STANDARD_AIR_TEMPERATURE,
    AVERAGE_PRESSURE_MEAN_SEA_LEVEL,
    DEFAULT_LATITUDE,
    DEFAULT_ALTITUDE)
from colour.plotting import (
    ASTM_G_173_ETR,
    aspect,
    bounding_box,
    display,
    colour_parameter,
    get_cmfs,
    single_colour_plot,
    single_spd_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__ = ['single_rayleigh_scattering_spd_plot', 'the_blue_sky_plot']


[docs]def single_rayleigh_scattering_spd_plot( CO2_concentration=STANDARD_CO2_CONCENTRATION, temperature=STANDARD_AIR_TEMPERATURE, pressure=AVERAGE_PRESSURE_MEAN_SEA_LEVEL, latitude=DEFAULT_LATITUDE, altitude=DEFAULT_ALTITUDE, cmfs='CIE 1931 2 Degree Standard Observer', **kwargs): """ Plots a single rayleigh scattering spectral power distribution. Parameters ---------- CO2_concentration : numeric, optional :math:`CO_2` concentration in parts per million (ppm). temperature : numeric, optional Air temperature :math:`T[K]` in kelvin degrees. pressure : numeric Surface pressure :math:`P` of the measurement site. latitude : numeric, optional Latitude of the site in degrees. altitude : numeric, optional Altitude of the site in meters. cmfs : unicode, optional Standard observer colour matching functions. \*\*kwargs : \*\* Keywords arguments. Returns ------- bool Definition success. Examples -------- >>> single_rayleigh_scattering_spd_plot() # doctest: +SKIP True """ title = 'Rayleigh Scattering' cmfs, name = get_cmfs(cmfs), cmfs settings = {'title': title, 'y_label': 'Optical Depth'} settings.update(kwargs) spd = rayleigh_scattering_spd(cmfs.shape, CO2_concentration, temperature, pressure, latitude, altitude) return single_spd_plot(spd, **settings)
[docs]def the_blue_sky_plot( cmfs='CIE 1931 2 Degree Standard Observer', **kwargs): """ Plots the blue sky. Parameters ---------- cmfs : unicode, optional Standard observer colour matching functions. \*\*kwargs : \*\* Keywords arguments. Returns ------- bool Definition success. Examples -------- >>> the_blue_sky_plot() # doctest: +SKIP True """ cmfs, name = get_cmfs(cmfs), cmfs ASTM_G_173_spd = ASTM_G_173_ETR.clone() rayleigh_spd = rayleigh_scattering_spd() ASTM_G_173_spd.align(rayleigh_spd.shape) spd = rayleigh_spd * ASTM_G_173_spd matplotlib.pyplot.subplots_adjust(hspace=0.4) matplotlib.pyplot.figure(1) matplotlib.pyplot.subplot(211) settings = { 'title': 'The Blue Sky - Synthetic Spectral Power Distribution', 'y_label': u'W / m-2 / nm-1', 'standalone': False} settings.update(kwargs) single_spd_plot(spd, name, **settings) matplotlib.pyplot.subplot(212) settings = { 'title': 'The Blue Sky - Colour', 'x_label': ('The sky is blue because molecules in the atmosphere ' 'scatter shorter wavelengths more than longer ones.\n' 'The synthetic spectral power distribution is computed as ' 'follows: ' '(ASTM G-173 ETR * Standard Air Rayleigh Scattering).'), 'y_label': '', 'aspect': None, 'standalone': False} blue_sky_color = XYZ_to_sRGB(spectral_to_XYZ(spd)) single_colour_plot(colour_parameter('', normalise(blue_sky_color)), **settings) settings = {'standalone': True} settings.update(kwargs) bounding_box(**settings) aspect(**settings) return display(**settings)