def test_plot_colour_quality_bars(self): """ Tests :func:`colour.plotting.quality.plot_colour_quality_bars` definition. """ illuminant = ILLUMINANTS_SDS['FL2'] light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] light_source = light_source.copy().align(SpectralShape(360, 830, 1)) cqs_i = colour_quality_scale(illuminant, additional_data=True) cqs_l = colour_quality_scale(light_source, additional_data=True) figure, axes = plot_colour_quality_bars([cqs_i, cqs_l]) self.assertIsInstance(figure, Figure) self.assertIsInstance(axes, Axes)
def colour_quality_scale_bars_plot(spd, **kwargs): """ Plots the *colour quality scale* of given illuminant or light source. Parameters ---------- spd : SpectralPowerDistribution Illuminant or light source to plot the *colour quality scale*. \*\*kwargs : \*\* Keywords arguments. Returns ------- bool Definition success. Examples -------- >>> from colour import ILLUMINANTS_RELATIVE_SPDS >>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('F2') >>> colour_quality_scale_bars_plot(illuminant) # doctest: +SKIP True """ if colour_quality_bars_plot( colour_quality_scale( spd, additional_data=True), standalone=False): settings = { 'title': 'Colour Quality Scale - {0}'.format(spd.title)} decorate(**settings) return display(**settings)
def test_plot_colour_quality_bars(self): """ Test :func:`colour.plotting.quality.plot_colour_quality_bars` definition. """ illuminant = SDS_ILLUMINANTS["FL2"] light_source = SDS_LIGHT_SOURCES["Kinoton 75P"] light_source = reshape_sd(light_source, SpectralShape(360, 830, 1)) cqs_i = colour_quality_scale(illuminant, additional_data=True) cqs_l = colour_quality_scale(light_source, additional_data=True) figure, axes = plot_colour_quality_bars([cqs_i, cqs_l]) self.assertIsInstance(figure, Figure) self.assertIsInstance(axes, Axes)
def multi_spd_colour_quality_scale_bars_plot(spds, **kwargs): """ Plots the *Colour Quality Scale* (CQS) of given illuminants or light sources spectral power distributions. Parameters ---------- spds : array_like Array of illuminants or light sources spectral power distributions to plot the *Colour Quality Scale* (CQS). Other Parameters ---------------- \**kwargs : dict, optional {:func:`colour.plotting.render`}, Please refer to the documentation of the previously listed definition. labels : bool, optional {:func:`colour.plotting.quality.colour_quality_bars_plot`}, Add labels above bars. hatching : bool or None, optional {:func:`colour.plotting.quality.colour_quality_bars_plot`}, Use hatching for the bars. hatching_repeat : int, optional {:func:`colour.plotting.quality.colour_quality_bars_plot`}, Hatching pattern repeat. Returns ------- Figure Current figure or None. Examples -------- >>> from colour import (ILLUMINANTS_RELATIVE_SPDS, ... LIGHT_SOURCES_RELATIVE_SPDS) >>> illuminant = ILLUMINANTS_RELATIVE_SPDS['F2'] >>> light_source = LIGHT_SOURCES_RELATIVE_SPDS['Kinoton 75P'] >>> multi_spd_colour_quality_scale_bars_plot([illuminant, light_source]) ... # doctest: +SKIP """ settings = {} settings.update(kwargs) settings.update({'standalone': False}) specifications = [ colour_quality_scale(spd, additional_data=True) for spd in spds ] colour_quality_bars_plot(specifications, **settings) settings = { 'title': 'Colour Quality Scale - {0}'.format(', '.join( [spd.strict_name for spd in spds])) } settings.update(kwargs) return render(with_boundaries=False, **settings)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual( colour_quality_scale(ILLUMINANTS_SDS['FL1']), 75.332008182589348, places=7) self.assertAlmostEqual( colour_quality_scale(ILLUMINANTS_SDS['FL2']), 64.686339173112856, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['Neodimium Incandescent']), 87.655035241231985, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)']), 83.179881092827671, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['H38HT-100 (Mercury)']), 22.860610106043985, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['Luxeon WW 2880']), 84.879524259605077, places=7)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F1')), 75.342060410089019, places=7) self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F2')), 64.686058037115245, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')), 87.659381222366406, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')), 83.179667074336621, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')), 22.869936010810584, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')), 84.883777827678131, places=7)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F1')), 75.334361226715345, places=7) self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F2')), 64.678111793396397, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')), 87.655549804699419, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')), 83.175799064274571, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')), 22.847928690340929, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')), 84.880575409680162, places=7)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS['F1']), 75.342427844068794, places=7) self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS['F2']), 64.686416902222192, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['Neodimium Incandescent']), 87.655035241231985, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['F32T8/TL841 (Triphosphor)']), 83.179847129624022, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['H38HT-100 (Mercury)']), 22.869154075340347, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['Luxeon WW 2880']), 84.880324578632809, places=7)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS['F1']), 75.342591389578701, places=7) self.assertAlmostEqual(colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS['F2']), 64.686339173112856, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['Neodimium Incandescent']), 87.655035241231985, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['F32T8/TL841 (Triphosphor)']), 83.179881092827671, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['H38HT-100 (Mercury)']), 22.870604734960732, places=7) self.assertAlmostEqual(colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS['Luxeon WW 2880']), 84.879524259605077, places=7)
def multi_spd_colour_quality_scale_bars_plot(spds, **kwargs): """ Plots the *colour quality scale* of given illuminants or light sources spectral power distributions. Parameters ---------- spds : array_like Array of illuminants or light sources spectral power distributions to plot the *colour quality scale*. \**kwargs : dict, optional Keywords arguments. Returns ------- bool Definition success. Examples -------- >>> from colour import ( ... ILLUMINANTS_RELATIVE_SPDS, ... LIGHT_SOURCES_RELATIVE_SPDS) >>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('F2') >>> light_source = LIGHT_SOURCES_RELATIVE_SPDS.get('Kinoton 75P') >>> multi_spd_colour_quality_scale_bars_plot( # doctest: +SKIP ... [illuminant, light_source]) True """ settings = {} settings.update(kwargs) settings.update({'standalone': False}) specifications = [ colour_quality_scale(spd, additional_data=True) for spd in spds ] colour_quality_bars_plot(specifications, **settings) settings = { 'title': 'Colour Quality Scale - {0}'.format(', '.join( [spd.title for spd in spds])) } settings.update(kwargs) decorate(**settings) return display(**settings)
def multi_spd_colour_quality_scale_bars_plot(spds, **kwargs): """ Plots the *colour quality scale* of given illuminants or light sources spectral power distributions. Parameters ---------- spds : array_like Array of illuminants or light sources spectral power distributions to plot the *colour quality scale*. \**kwargs : dict, optional Keywords arguments. Returns ------- bool Definition success. Examples -------- >>> from colour import ( ... ILLUMINANTS_RELATIVE_SPDS, ... LIGHT_SOURCES_RELATIVE_SPDS) >>> illuminant = ILLUMINANTS_RELATIVE_SPDS.get('F2') >>> light_source = LIGHT_SOURCES_RELATIVE_SPDS.get('Kinoton 75P') >>> multi_spd_colour_quality_scale_bars_plot( # doctest: +SKIP ... [illuminant, light_source]) True """ settings = {} settings.update(kwargs) settings.update({'standalone': False}) specifications = [colour_quality_scale(spd, additional_data=True) for spd in spds] colour_quality_bars_plot(specifications, **settings) settings = {'title': 'Colour Quality Scale - {0}'.format(', '.join( [spd.title for spd in spds]))} settings.update(kwargs) decorate(**settings) return display(**settings)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F1')), 75.342060410089019, places=7) self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F2')), 64.686058037115245, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')), 87.659381222366406, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')), 83.179667074336621, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')), 22.869936010810584, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')), 84.883777827678131, places=7)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F1')), 75.334361226715345, places=7) self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_RELATIVE_SPDS.get('F2')), 64.678111793396397, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Neodimium Incandescent')), 87.655549804699419, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('F32T8/TL841 (Triphosphor)')), 83.175799064274571, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('H38HT-100 (Mercury)')), 22.847928690340929, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_RELATIVE_SPDS.get('Luxeon WW 2880')), 84.880575409680162, places=7)
def plot_multi_sds_colour_quality_scales_bars(sds, **kwargs): """ Plots the *Colour Quality Scale* (CQS) of given illuminants or light sources spectral distributions. Parameters ---------- sds : array_like Array of illuminants or light sources spectral distributions to plot the *Colour Quality Scale* (CQS). Other Parameters ---------------- \\**kwargs : dict, optional {:func:`colour.plotting.artist`, :func:`colour.plotting.render`}, Please refer to the documentation of the previously listed definitions. labels : bool, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Add labels above bars. hatching : bool or None, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Use hatching for the bars. hatching_repeat : int, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Hatching pattern repeat. Returns ------- tuple Current figure and axes. Examples -------- >>> from colour import (ILLUMINANTS_SDS, ... LIGHT_SOURCES_SDS) >>> illuminant = ILLUMINANTS_SDS['F2'] >>> light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source]) ... # doctest: +SKIP .. image:: ../_static/Plotting_\ Plot_Multi_SDs_Colour_Quality_Scales_Bars.png :align: center :alt: plot_multi_sds_colour_quality_scales_bars """ settings = dict(kwargs) settings.update({'standalone': False}) specifications = [ colour_quality_scale(sd, additional_data=True) for sd in sds ] figure, axes = plot_colour_quality_bars(specifications, **settings) title = 'Colour Quality Scale - {0}'.format(', '.join( [sd.strict_name for sd in sds])) settings = {'axes': axes, 'title': title} settings.update(kwargs) return render(**settings)
def plot_multi_sds_colour_quality_scales_bars( sds: Union[ Sequence[Union[SpectralDistribution, MultiSpectralDistributions]], MultiSpectralDistributions, ], method: Union[ Literal["NIST CQS 7.4", "NIST CQS 9.0"], str ] = "NIST CQS 9.0", **kwargs: Any, ) -> Tuple[plt.Figure, plt.Axes]: """ Plot the *Colour Quality Scale* (CQS) of given illuminants or light sources spectral distributions. Parameters ---------- sds Spectral distributions or multi-spectral distributions to plot. `sds` can be a single :class:`colour.MultiSpectralDistributions` class instance, a list of :class:`colour.MultiSpectralDistributions` class instances or a list of :class:`colour.SpectralDistribution` class instances. method *Colour Quality Scale* (CQS) computation method. Other Parameters ---------------- kwargs {:func:`colour.plotting.artist`, :func:`colour.plotting.quality.plot_colour_quality_bars`, :func:`colour.plotting.render`}, See the documentation of the previously listed definitions. Returns ------- :class:`tuple` Current figure and axes. Examples -------- >>> from colour import (SDS_ILLUMINANTS, ... SDS_LIGHT_SOURCES) >>> illuminant = SDS_ILLUMINANTS['FL2'] >>> light_source = SDS_LIGHT_SOURCES['Kinoton 75P'] >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source]) ... # doctest: +ELLIPSIS (<Figure size ... with 1 Axes>, <...AxesSubplot...>) .. image:: ../_static/Plotting_\ Plot_Multi_SDS_Colour_Quality_Scales_Bars.png :align: center :alt: plot_multi_sds_colour_quality_scales_bars """ method = validate_method(method, COLOUR_QUALITY_SCALE_METHODS) sds_converted = sds_and_msds_to_sds(sds) settings: Dict[str, Any] = dict(kwargs) settings.update({"standalone": False}) specifications = cast( List[ColourRendering_Specification_CQS], [colour_quality_scale(sd, True, method) for sd in sds_converted], ) _figure, axes = plot_colour_quality_bars(specifications, **settings) title = ( f"Colour Quality Scale - " f"{', '.join([sd.strict_name for sd in sds_converted])}" ) settings = {"axes": axes, "title": title} settings.update(kwargs) return render(**settings)
def generate_documentation_plots(output_directory): """ Generates documentation plots. Parameters ---------- output_directory : unicode Output directory. """ filter_warnings() colour_style() np.random.seed(0) # ************************************************************************* # "README.rst" # ************************************************************************* filename = os.path.join(output_directory, 'Examples_Colour_Automatic_Conversion_Graph.png') plot_automatic_colour_conversion_graph(filename) arguments = { 'tight_layout': True, 'transparent_background': True, 'filename': os.path.join(output_directory, 'Examples_Plotting_Visible_Spectrum.png') } plt.close( plot_visible_spectrum('CIE 1931 2 Degree Standard Observer', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_Illuminant_F1_SD.png') plt.close(plot_single_illuminant_sd('FL1', **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Examples_Plotting_Blackbodies.png') blackbody_sds = [ sd_blackbody(i, SpectralShape(0, 10000, 10)) for i in range(1000, 15000, 1000) ] plt.close( plot_multi_sds(blackbody_sds, y_label='W / (sr m$^2$) / m', use_sds_colours=True, normalise_sds_colours=True, legend_location='upper right', bounding_box=(0, 1250, 0, 2.5e15), **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_Cone_Fundamentals.png') plt.close( plot_single_cmfs('Stockman & Sharpe 2 Degree Cone Fundamentals', y_label='Sensitivity', bounding_box=(390, 870, 0, 1.1), **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_Luminous_Efficiency.png') plt.close( plot_multi_sds((sd_mesopic_luminous_efficiency_function(0.2), PHOTOPIC_LEFS['CIE 1924 Photopic Standard Observer'], SCOTOPIC_LEFS['CIE 1951 Scotopic Standard Observer']), y_label='Luminous Efficiency', legend_location='upper right', y_tighten=True, margins=(0, 0, 0, .1), **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_BabelColor_Average.png') plt.close( plot_multi_sds(COLOURCHECKERS_SDS['BabelColor Average'].values(), use_sds_colours=True, title=('BabelColor Average - ' 'Spectral Distributions'), **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_ColorChecker_2005.png') plt.close( plot_single_colour_checker('ColorChecker 2005', text_parameters={'visible': False}, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_Chromaticities_Prediction.png') plt.close( plot_corresponding_chromaticities_prediction(2, 'Von Kries', 'Bianco', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_CCT_CIE_1960_UCS_Chromaticity_Diagram.png') plt.close( plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS( ['A', 'B', 'C'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Examples_Plotting_Chromaticities_CIE_1931_Chromaticity_Diagram.png') RGB = np.random.random((32, 32, 3)) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931( RGB, 'ITU-R BT.709', colourspaces=['ACEScg', 'S-Gamut'], show_pointer_gamut=True, **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Examples_Plotting_CRI.png') plt.close( plot_single_sd_colour_rendering_index_bars(ILLUMINANTS_SDS['FL2'], **arguments)[0]) # ************************************************************************* # Documentation # ************************************************************************* arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_CVD_Simulation_Machado2009.png') plt.close(plot_cvd_simulation_Machado2009(RGB, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_Colour_Checker.png') plt.close(plot_single_colour_checker('ColorChecker 2005', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_Colour_Checkers.png') plt.close( plot_multi_colour_checkers(['ColorChecker 1976', 'ColorChecker 2005'], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Single_SD.png') data = { 500: 0.0651, 520: 0.0705, 540: 0.0772, 560: 0.0870, 580: 0.1128, 600: 0.1360 } sd = SpectralDistribution(data, name='Custom') plt.close(plot_single_sd(sd, **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Multi_SDS.png') data_1 = { 500: 0.004900, 510: 0.009300, 520: 0.063270, 530: 0.165500, 540: 0.290400, 550: 0.433450, 560: 0.594500 } data_2 = { 500: 0.323000, 510: 0.503000, 520: 0.710000, 530: 0.862000, 540: 0.954000, 550: 0.994950, 560: 0.995000 } spd1 = SpectralDistribution(data_1, name='Custom 1') spd2 = SpectralDistribution(data_2, name='Custom 2') plt.close(plot_multi_sds([spd1, spd2], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Single_CMFS.png') plt.close( plot_single_cmfs('CIE 1931 2 Degree Standard Observer', **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Multi_CMFS.png') cmfs = ('CIE 1931 2 Degree Standard Observer', 'CIE 1964 10 Degree Standard Observer') plt.close(plot_multi_cmfs(cmfs, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_Illuminant_SD.png') plt.close(plot_single_illuminant_sd('A', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_Illuminant_SDS.png') plt.close(plot_multi_illuminant_sds(['A', 'B', 'C'], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Visible_Spectrum.png') plt.close(plot_visible_spectrum(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_Lightness_Function.png') plt.close(plot_single_lightness_function('CIE 1976', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_Lightness_Functions.png') plt.close( plot_multi_lightness_functions(['CIE 1976', 'Wyszecki 1963'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_Luminance_Function.png') plt.close(plot_single_luminance_function('CIE 1976', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_Luminance_Functions.png') plt.close( plot_multi_luminance_functions(['CIE 1976', 'Newhall 1943'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Blackbody_Spectral_Radiance.png') plt.close( plot_blackbody_spectral_radiance(3500, blackbody='VY Canis Major', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Blackbody_Colours.png') plt.close( plot_blackbody_colours(SpectralShape(150, 12500, 50), **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_Colour_Swatch.png') RGB = ColourSwatch(RGB=(0.45620519, 0.03081071, 0.04091952)) plt.close(plot_single_colour_swatch(RGB, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_Colour_Swatches.png') RGB_1 = ColourSwatch(RGB=(0.45293517, 0.31732158, 0.26414773)) RGB_2 = ColourSwatch(RGB=(0.77875824, 0.57726450, 0.50453169)) plt.close(plot_multi_colour_swatches([RGB_1, RGB_2], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Single_Function.png') plt.close(plot_single_function(lambda x: x**(1 / 2.2), **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Multi_Functions.png') functions = { 'Gamma 2.2': lambda x: x**(1 / 2.2), 'Gamma 2.4': lambda x: x**(1 / 2.4), 'Gamma 2.6': lambda x: x**(1 / 2.6), } plt.close(plot_multi_functions(functions, **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Image.png') path = os.path.join(output_directory, 'Logo_Medium_001.png') plt.close(plot_image(read_image(str(path)), **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Corresponding_Chromaticities_Prediction.png') plt.close( plot_corresponding_chromaticities_prediction(1, 'Von Kries', 'CAT02', **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Spectral_Locus.png') plt.close( plot_spectral_locus(spectral_locus_colours='RGB', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Chromaticity_Diagram_Colours.png') plt.close(plot_chromaticity_diagram_colours(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Chromaticity_Diagram.png') plt.close(plot_chromaticity_diagram(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Chromaticity_Diagram_CIE1931.png') plt.close(plot_chromaticity_diagram_CIE1931(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Chromaticity_Diagram_CIE1960UCS.png') plt.close(plot_chromaticity_diagram_CIE1960UCS(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Chromaticity_Diagram_CIE1976UCS.png') plt.close(plot_chromaticity_diagram_CIE1976UCS(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_SDS_In_Chromaticity_Diagram.png') A = ILLUMINANTS_SDS['A'] D65 = ILLUMINANTS_SDS['D65'] plt.close(plot_sds_in_chromaticity_diagram([A, D65], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1931.png') plt.close( plot_sds_in_chromaticity_diagram_CIE1931([A, D65], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1960UCS.png') plt.close( plot_sds_in_chromaticity_diagram_CIE1960UCS([A, D65], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1976UCS.png') plt.close( plot_sds_in_chromaticity_diagram_CIE1976UCS([A, D65], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Pointer_Gamut.png') plt.close(plot_pointer_gamut(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram.png') plt.close( plot_RGB_colourspaces_in_chromaticity_diagram( ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram_CIE1931.png') plt.close( plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931( ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Colourspaces_In_' 'Chromaticity_Diagram_CIE1960UCS.png') plt.close( plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS( ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Colourspaces_In_' 'Chromaticity_Diagram_CIE1976UCS.png') plt.close( plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS( ['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Chromaticities_In_' 'Chromaticity_Diagram.png') RGB = np.random.random((128, 128, 3)) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram( RGB, 'ITU-R BT.709', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Chromaticities_In_' 'Chromaticity_Diagram_CIE1931.png') plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931( RGB, 'ITU-R BT.709', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Chromaticities_In_' 'Chromaticity_Diagram_CIE1960UCS.png') plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS( RGB, 'ITU-R BT.709', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Chromaticities_In_' 'Chromaticity_Diagram_CIE1976UCS.png') plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS( RGB, 'ITU-R BT.709', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_Chromaticity_Diagram.png') plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_' 'Chromaticity_Diagram_CIE1931.png') plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931( **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_' 'Chromaticity_Diagram_CIE1960UCS.png') plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS( **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Ellipses_MacAdam1942_In_' 'Chromaticity_Diagram_CIE1976UCS.png') plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS( **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Single_CCTF.png') plt.close(plot_single_cctf('ITU-R BT.709', **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Multi_CCTFs.png') plt.close(plot_multi_cctfs(['ITU-R BT.709', 'sRGB'], **arguments)[0]) data = np.array([ [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.40920000, 0.28120000, 0.30600000]), np.array([ [0.02495100, 0.01908600, 0.02032900], [0.10944300, 0.06235900, 0.06788100], [0.27186500, 0.18418700, 0.19565300], [0.48898900, 0.40749400, 0.44854600], ]), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.30760000, 0.48280000, 0.42770000]), np.array([ [0.02108000, 0.02989100, 0.02790400], [0.06194700, 0.11251000, 0.09334400], [0.15255800, 0.28123300, 0.23234900], [0.34157700, 0.56681300, 0.47035300], ]), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.39530000, 0.28120000, 0.18450000]), np.array([ [0.02436400, 0.01908600, 0.01468800], [0.10331200, 0.06235900, 0.02854600], [0.26311900, 0.18418700, 0.12109700], [0.43158700, 0.40749400, 0.39008600], ]), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.20510000, 0.18420000, 0.57130000]), np.array([ [0.03039800, 0.02989100, 0.06123300], [0.08870000, 0.08498400, 0.21843500], [0.18405800, 0.18418700, 0.40111400], [0.32550100, 0.34047200, 0.50296900], [0.53826100, 0.56681300, 0.80010400], ]), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.35770000, 0.28120000, 0.11250000]), np.array([ [0.03678100, 0.02989100, 0.01481100], [0.17127700, 0.11251000, 0.01229900], [0.30080900, 0.28123300, 0.21229800], [0.52976000, 0.40749400, 0.11720000], ]), None, ], ]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Constant_Hue_Loci.png') plt.close(plot_constant_hue_loci(data, 'IPT', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_Munsell_Value_Function.png') plt.close(plot_single_munsell_value_function('ASTM D1535', **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_Munsell_Value_Functions.png') plt.close( plot_multi_munsell_value_functions(['ASTM D1535', 'McCamy 1987'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_SD_Rayleigh_Scattering.png') plt.close(plot_single_sd_rayleigh_scattering(**arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_The_Blue_Sky.png') plt.close(plot_the_blue_sky(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Colour_Quality_Bars.png') illuminant = ILLUMINANTS_SDS['FL2'] light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] light_source = light_source.copy().align(SpectralShape(360, 830, 1)) cqs_i = colour_quality_scale(illuminant, additional_data=True) cqs_l = colour_quality_scale(light_source, additional_data=True) plt.close(plot_colour_quality_bars([cqs_i, cqs_l], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_SD_Colour_Rendering_Index_Bars.png') illuminant = ILLUMINANTS_SDS['FL2'] plt.close( plot_single_sd_colour_rendering_index_bars(illuminant, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_SDS_Colour_Rendering_Indexes_Bars.png') light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] plt.close( plot_multi_sds_colour_rendering_indexes_bars( [illuminant, light_source], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Single_SD_Colour_Quality_Scale_Bars.png') illuminant = ILLUMINANTS_SDS['FL2'] plt.close( plot_single_sd_colour_quality_scale_bars(illuminant, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Multi_SDS_Colour_Quality_Scales_Bars.png') light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] plt.close( plot_multi_sds_colour_quality_scales_bars([illuminant, light_source], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_Planckian_Locus.png') plt.close(plot_planckian_locus(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Planckian_Locus_CIE1931.png') plt.close(plot_planckian_locus_CIE1931(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Planckian_Locus_CIE1960UCS.png') plt.close(plot_planckian_locus_CIE1960UCS(**arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram.png') plt.close( plot_planckian_locus_in_chromaticity_diagram(['A', 'B', 'C'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1931.png') plt.close( plot_planckian_locus_in_chromaticity_diagram_CIE1931(['A', 'B', 'C'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1960UCS.png') plt.close( plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS( ['A', 'B', 'C'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Colourspaces_Gamuts.png') plt.close( plot_RGB_colourspaces_gamuts(['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Plotting_Plot_RGB_Colourspaces_Gamuts.png') plt.close( plot_RGB_colourspaces_gamuts(['ITU-R BT.709', 'ACEScg', 'S-Gamut'], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Plotting_Plot_RGB_Scatter.png') plt.close(plot_RGB_scatter(RGB, 'ITU-R BT.709', **arguments)[0]) filename = os.path.join( output_directory, 'Plotting_Plot_Colour_Automatic_Conversion_Graph.png') plot_automatic_colour_conversion_graph(filename) # ************************************************************************* # "tutorial.rst" # ************************************************************************* arguments['filename'] = os.path.join(output_directory, 'Tutorial_Visible_Spectrum.png') plt.close(plot_visible_spectrum(**arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Tutorial_Sample_SD.png') sample_sd_data = { 380: 0.048, 385: 0.051, 390: 0.055, 395: 0.060, 400: 0.065, 405: 0.068, 410: 0.068, 415: 0.067, 420: 0.064, 425: 0.062, 430: 0.059, 435: 0.057, 440: 0.055, 445: 0.054, 450: 0.053, 455: 0.053, 460: 0.052, 465: 0.052, 470: 0.052, 475: 0.053, 480: 0.054, 485: 0.055, 490: 0.057, 495: 0.059, 500: 0.061, 505: 0.062, 510: 0.065, 515: 0.067, 520: 0.070, 525: 0.072, 530: 0.074, 535: 0.075, 540: 0.076, 545: 0.078, 550: 0.079, 555: 0.082, 560: 0.087, 565: 0.092, 570: 0.100, 575: 0.107, 580: 0.115, 585: 0.122, 590: 0.129, 595: 0.134, 600: 0.138, 605: 0.142, 610: 0.146, 615: 0.150, 620: 0.154, 625: 0.158, 630: 0.163, 635: 0.167, 640: 0.173, 645: 0.180, 650: 0.188, 655: 0.196, 660: 0.204, 665: 0.213, 670: 0.222, 675: 0.231, 680: 0.242, 685: 0.251, 690: 0.261, 695: 0.271, 700: 0.282, 705: 0.294, 710: 0.305, 715: 0.318, 720: 0.334, 725: 0.354, 730: 0.372, 735: 0.392, 740: 0.409, 745: 0.420, 750: 0.436, 755: 0.450, 760: 0.462, 765: 0.465, 770: 0.448, 775: 0.432, 780: 0.421 } sd = SpectralDistribution(sample_sd_data, name='Sample') plt.close(plot_single_sd(sd, **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Tutorial_SD_Interpolation.png') sd_copy = sd.copy() sd_copy.interpolate(SpectralShape(400, 770, 1)) plt.close( plot_multi_sds([sd, sd_copy], bounding_box=[730, 780, 0.25, 0.5], **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Tutorial_Sample_Swatch.png') sd = SpectralDistribution(sample_sd_data) cmfs = STANDARD_OBSERVERS_CMFS['CIE 1931 2 Degree Standard Observer'] illuminant = ILLUMINANTS_SDS['D65'] with domain_range_scale('1'): XYZ = sd_to_XYZ(sd, cmfs, illuminant) RGB = XYZ_to_sRGB(XYZ) plt.close( plot_single_colour_swatch(ColourSwatch('Sample', RGB), text_parameters={'size': 'x-large'}, **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Tutorial_Neutral5.png') patch_name = 'neutral 5 (.70 D)' patch_sd = COLOURCHECKERS_SDS['ColorChecker N Ohta'][patch_name] with domain_range_scale('1'): XYZ = sd_to_XYZ(patch_sd, cmfs, illuminant) RGB = XYZ_to_sRGB(XYZ) plt.close( plot_single_colour_swatch(ColourSwatch(patch_name.title(), RGB), text_parameters={'size': 'x-large'}, **arguments)[0]) arguments['filename'] = os.path.join(output_directory, 'Tutorial_Colour_Checker.png') plt.close( plot_single_colour_checker(colour_checker='ColorChecker 2005', text_parameters={'visible': False}, **arguments)[0]) arguments['filename'] = os.path.join( output_directory, 'Tutorial_CIE_1931_Chromaticity_Diagram.png') xy = XYZ_to_xy(XYZ) plot_chromaticity_diagram_CIE1931(standalone=False) x, y = xy plt.plot(x, y, 'o-', color='white') # Annotating the plot. plt.annotate(patch_sd.name.title(), xy=xy, xytext=(-50, 30), textcoords='offset points', arrowprops=dict(arrowstyle='->', connectionstyle='arc3, rad=-0.2')) plt.close( render(standalone=True, limits=(-0.1, 0.9, -0.1, 0.9), x_tighten=True, y_tighten=True, **arguments)[0]) # ************************************************************************* # "basics.rst" # ************************************************************************* arguments['filename'] = os.path.join(output_directory, 'Basics_Logo_Small_001_CIE_XYZ.png') RGB = read_image(os.path.join(output_directory, 'Logo_Small_001.png'))[..., 0:3] XYZ = sRGB_to_XYZ(RGB) plt.close( plot_image(XYZ, text_parameters={'text': 'sRGB to XYZ'}, **arguments)[0])
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual( colour_quality_scale(ILLUMINANTS_SDS['FL1']), 74.933405395713180, places=7) self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_SDS['FL1'], method='NIST CQS 7.4'), 75.332008182589348, places=7) self.assertAlmostEqual( colour_quality_scale(ILLUMINANTS_SDS['FL2']), 64.017283509280588, places=7) self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_SDS['FL2'], method='NIST CQS 7.4'), 64.686339173112856, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['Neodimium Incandescent']), 89.693921013642381, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['Neodimium Incandescent'], method='NIST CQS 7.4'), 87.655035241231985, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)']), 84.878441814420910, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)'], method='NIST CQS 7.4'), 83.179881092827671, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['H38HT-100 (Mercury)']), 19.836071708638958, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['H38HT-100 (Mercury)'], method='NIST CQS 7.4'), 22.860610106043985, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['Luxeon WW 2880']), 86.491761709787994, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['Luxeon WW 2880'], method='NIST CQS 7.4'), 84.879524259605077, places=7) specification_r = CQS_Specification( name='FL1', Q_a=75.332008182589348, Q_f=76.339439008799872, Q_p=74.235391056498486, Q_g=84.222748330112054, Q_d=84.126957016581841, Q_as={ 1: VS_ColourQualityScaleData( name='VS1', Q_a=77.680854801718439, D_C_ab=-1.411454116288503, D_E_ab=7.191809380490093, D_Ep_ab=7.191809380490093), 2: VS_ColourQualityScaleData( name='VS2', Q_a=98.449964521835454, D_C_ab=2.416949235948934, D_E_ab=2.468031951275495, D_Ep_ab=0.499537889816771), 3: VS_ColourQualityScaleData( name='VS3', Q_a=85.128488974188656, D_C_ab=2.051673516490851, D_E_ab=5.212485950404579, D_Ep_ab=4.791726783206154), 4: VS_ColourQualityScaleData( name='VS4', Q_a=75.929101405967231, D_C_ab=-1.544244803829976, D_E_ab=7.756423964663330, D_Ep_ab=7.756423964663330), 5: VS_ColourQualityScaleData( name='VS5', Q_a=76.560036127768228, D_C_ab=-5.962959343458696, D_E_ab=7.553059580932679, D_Ep_ab=7.553059580932679), 6: VS_ColourQualityScaleData( name='VS6', Q_a=75.674875949078682, D_C_ab=-7.785240663276603, D_E_ab=7.838368326299190, D_Ep_ab=7.838368326299190), 7: VS_ColourQualityScaleData( name='VS7', Q_a=74.856012003857145, D_C_ab=-6.773721961614541, D_E_ab=8.102319790027652, D_Ep_ab=8.102319790027652), 8: VS_ColourQualityScaleData( name='VS8', Q_a=85.007243427918965, D_C_ab=-0.684332522268967, D_E_ab=4.830795743950247, D_Ep_ab=4.830795743950247), 9: VS_ColourQualityScaleData( name='VS9', Q_a=95.600642739549912, D_C_ab=3.245002214218772, D_E_ab=3.541112179773836, D_Ep_ab=1.417545801537952), 10: VS_ColourQualityScaleData( name='VS10', Q_a=84.897394198279201, D_C_ab=3.2779983437733051, D_E_ab=5.867290950207070, D_Ep_ab=4.866192551944616), 11: VS_ColourQualityScaleData( name='VS11', Q_a=76.652664070814652, D_C_ab=0.889135877229947, D_E_ab=7.575563455510737, D_Ep_ab=7.523204042181251), 12: VS_ColourQualityScaleData( name='VS12', Q_a=74.392341352838727, D_C_ab=-1.950461685183292, D_E_ab=8.251784061375552, D_Ep_ab=8.251784061375552), 13: VS_ColourQualityScaleData( name='VS13', Q_a=71.733157403665416, D_C_ab=-5.748914457790455, D_E_ab=9.109057119322612, D_Ep_ab=9.109057119322612), 14: VS_ColourQualityScaleData( name='VS14', Q_a=53.322108325530110, D_C_ab=-14.642967562714134, D_E_ab=15.053589749938459, D_Ep_ab=15.053589749938459), 15: VS_ColourQualityScaleData( name='VS15', Q_a=62.611167146423085, D_C_ab=-10.071676496831763, D_E_ab=12.051527779341935, D_Ep_ab=12.051527779341935) }, colorimetry_data=([ VS_ColorimetryData( name='VS1', XYZ=np.array([0.13184562, 0.09885158, 0.22533524]), Lab=np.array([37.63552369, 27.62126274, -26.23567072]), C=38.095204070389400), VS_ColorimetryData( name='VS2', XYZ=np.array([0.13066767, 0.10335651, 0.30768635]), Lab=np.array([38.43822294, 23.38828386, -37.84013645]), C=44.484691170961092), VS_ColorimetryData( name='VS3', XYZ=np.array([0.10087152, 0.09197794, 0.32255009]), Lab=np.array([36.36236009, 11.00844158, -43.50665998]), C=44.877781233091532), VS_ColorimetryData( name='VS4', XYZ=np.array([0.13339874, 0.15690626, 0.38428052]), Lab=np.array([46.56595565, -9.85969969, -33.955993]), C=35.358494572170223), VS_ColorimetryData( name='VS5', XYZ=np.array([0.18662805, 0.24704107, 0.40046308]), Lab=np.array([56.78597632, -23.14117043, -18.29881674]), C=29.501872194883592), VS_ColorimetryData( name='VS6', XYZ=np.array([0.15841746, 0.24152639, 0.26931454]), Lab=np.array([56.24029681, -36.23772023, -1.42733778]), C=36.265819453020534), VS_ColorimetryData( name='VS7', XYZ=np.array([0.14989922, 0.24926212, 0.138238]), Lab=np.array([57.003456, -44.54988402, 24.99942371]), C=51.084864212342254), VS_ColorimetryData( name='VS8', XYZ=np.array([0.26139991, 0.36817885, 0.11429053]), Lab=np.array([67.14017484, -33.23131783, 48.67413212]), C=58.936335329004450), VS_ColorimetryData( name='VS9', XYZ=np.array([0.42407924, 0.5285824, 0.11437796]), Lab=np.array([77.791228, -22.23481066, 67.01388225]), C=70.606283139833707), VS_ColorimetryData( name='VS10', XYZ=np.array([0.553588, 0.62024037, 0.09664934]), Lab=np.array([82.9262011, -8.87753163, 81.03696819]), C=81.521781025372348), VS_ColorimetryData( name='VS11', XYZ=np.array([0.39748223, 0.39523993, 0.0573943]), Lab=np.array([69.1291429, 6.94195834, 71.52497069]), C=71.861061901342111), VS_ColorimetryData( name='VS12', XYZ=np.array([0.43749683, 0.38968504, 0.08635639]), Lab=np.array([68.72844451, 20.81629234, 59.85617607]), C=63.372548004889417), VS_ColorimetryData( name='VS13', XYZ=np.array([0.34652079, 0.27550838, 0.08903238]), Lab=np.array([59.48075943, 31.8153513, 43.0302754]), C=53.514681906739007), VS_ColorimetryData( name='VS14', XYZ=np.array([0.14262899, 0.09104011, 0.04951868]), Lab=np.array([36.18378646, 40.75048676, 18.33518283]), C=44.685356670534020), VS_ColorimetryData( name='VS15', XYZ=np.array([0.13589052, 0.092129, 0.11599991]), Lab=np.array([36.39100967, 35.60560293, -4.81131533]), C=35.929204214045100) ], [ VS_ColorimetryData( name='VS1', XYZ=np.array([0.15204948, 0.10842571, 0.21637094]), Lab=np.array([39.31404365, 32.98305053, -21.74613572]), C=39.506658186677903), VS_ColorimetryData( name='VS2', XYZ=np.array([0.13188419, 0.10619651, 0.29958251]), Lab=np.array([38.93233648, 22.05678627, -35.82168464]), C=42.067741935012158), VS_ColorimetryData( name='VS3', XYZ=np.array([0.10125948, 0.09854418, 0.32974284]), Lab=np.array([37.57986983, 6.06363078, -42.39466811]), C=42.826107716600681), VS_ColorimetryData( name='VS4', XYZ=np.array([0.13147324, 0.16804591, 0.39334981]), Lab=np.array([48.01287105, -17.35257125, -32.5683964]), C=36.902739376000198), VS_ColorimetryData( name='VS5', XYZ=np.array([0.18148174, 0.25847203, 0.41337803]), Lab=np.array([57.89173056, -30.60333248, -17.92178331]), C=35.464831538342288), VS_ColorimetryData( name='VS6', XYZ=np.array([0.15185555, 0.25077644, 0.28171886]), Lab=np.array([57.15099451, -44.01579207, -1.76236936]), C=44.051060116297137), VS_ColorimetryData( name='VS7', XYZ=np.array([0.1395656, 0.25329693, 0.1447564]), Lab=np.array([57.39525164, -52.59411951, 24.11378416]), C=57.858586173956795), VS_ColorimetryData( name='VS8', XYZ=np.array([0.24671064, 0.36211041, 0.11980564]), Lab=np.array([66.68086148, -37.45951248, 46.3832832]), C=59.620667851273417), VS_ColorimetryData( name='VS9', XYZ=np.array([0.4081725, 0.508617, 0.11898838]), Lab=np.array([76.59515888, -21.91694258, 63.69607363]), C=67.361280925614935), VS_ColorimetryData( name='VS10', XYZ=np.array([0.56031473, 0.60567807, 0.10172838]), Lab=np.array([82.14584971, -3.82960002, 78.15000763]), C=78.243782681599043), VS_ColorimetryData( name='VS11', XYZ=np.array([0.40536278, 0.38001713, 0.05756101]), Lab=np.array([68.02187691, 14.16935995, 69.5431055]), C=70.971926024112165), VS_ColorimetryData( name='VS12', XYZ=np.array([0.45402541, 0.37917641, 0.08624766]), Lab=np.array([67.95987006, 28.93047228, 58.56725509]), C=65.323009690072709), VS_ColorimetryData( name='VS13', XYZ=np.array([0.37202687, 0.27411307, 0.08885905]), Lab=np.array([59.35311972, 40.9220464, 42.86677002]), C=59.263596364529462), VS_ColorimetryData( name='VS14', XYZ=np.array([0.19305452, 0.11049115, 0.04885402]), Lab=np.array([39.66307016, 53.96236134, 24.65590426]), C=59.328324233248154), VS_ColorimetryData( name='VS15', XYZ=np.array([0.17304703, 0.10699393, 0.11285076]), Lab=np.array([39.0694885, 45.99591907, 0.67561493]), C=46.000880710876864) ])) specification_t = colour_quality_scale( ILLUMINANTS_SDS['FL1'], additional_data=True, method='NIST CQS 7.4') np.testing.assert_almost_equal( [ data.Q_a for _index, data in sorted(specification_r.Q_as.items()) ], [ data.Q_a for _index, data in sorted(specification_t.Q_as.items()) ], decimal=7, ) specification_r = CQS_Specification( name='FL1', Q_a=74.933405395713152, Q_f=75.895019131814692, Q_p=None, Q_g=83.859802969126989, Q_d=None, Q_as={ 1: VS_ColourQualityScaleData( name='VS1', Q_a=51.884484734774539, D_C_ab=-14.642964823527400, D_E_ab=15.053586922553365, D_Ep_ab=15.053586922553365), 2: VS_ColourQualityScaleData( name='VS2', Q_a=70.859386580835093, D_C_ab=-5.748912901584454, D_E_ab=9.109057753686301, D_Ep_ab=9.109057753686301), 3: VS_ColourQualityScaleData( name='VS3', Q_a=74.615079552044733, D_C_ab=-0.199055128982607, D_E_ab=7.934584371287040, D_Ep_ab=7.934584371287040), 4: VS_ColourQualityScaleData( name='VS4', Q_a=85.470454126502858, D_C_ab=2.620284036804321, D_E_ab=5.242841277796065, D_Ep_ab=4.541089762450278), 5: VS_ColourQualityScaleData( name='VS5', Q_a=95.464568465261436, D_C_ab=3.244999121708176, D_E_ab=3.541109287718627, D_Ep_ab=1.417545656294811), 6: VS_ColourQualityScaleData( name='VS6', Q_a=84.543583902150289, D_C_ab=-0.684333146377760, D_E_ab=4.830795633277699, D_Ep_ab=4.830795633277699), 7: VS_ColourQualityScaleData( name='VS7', Q_a=74.078633444044030, D_C_ab=-6.773727982269591, D_E_ab=8.102322827150674, D_Ep_ab=8.102322827150674), 8: VS_ColourQualityScaleData( name='VS8', Q_a=74.922760174879087, D_C_ab=-7.785252182726744, D_E_ab=7.838379721335357, D_Ep_ab=7.838379721335357), 9: VS_ColourQualityScaleData( name='VS9', Q_a=75.835254560528938, D_C_ab=-5.962964833116001, D_E_ab=7.553073243258186, D_Ep_ab=7.553073243258186), 10: VS_ColourQualityScaleData( name='VS10', Q_a=75.184803574188905, D_C_ab=-1.544240934167505, D_E_ab=7.756446084611037, D_Ep_ab=7.756446084611037), 11: VS_ColourQualityScaleData( name='VS11', Q_a=78.089782546668729, D_C_ab=1.745770231264103, D_E_ab=7.067228869124241, D_Ep_ab=6.848212189193262), 12: VS_ColourQualityScaleData( name='VS12', Q_a=91.955688469006077, D_C_ab=2.855869216256835, D_E_ab=3.804866911398577, D_Ep_ab=2.514164519893699), 13: VS_ColourQualityScaleData( name='VS13', Q_a=81.468184220490429, D_C_ab=0.030402986778803, D_E_ab=5.792177528304779, D_Ep_ab=5.792097735518090), 14: VS_ColourQualityScaleData( name='VS14', Q_a=76.482628265932789, D_C_ab=-5.080750395110528, D_E_ab=7.350669246766205, D_Ep_ab=7.350669246766205), 15: VS_ColourQualityScaleData( name='VS15', Q_a=65.370026142948518, D_C_ab=-9.509238816066890, D_E_ab=10.826397690468854, D_Ep_ab=10.826397690468854) }, colorimetry_data=([ VS_ColorimetryData( name='VS1', XYZ=np.array([0.14262899, 0.09104012, 0.04951869]), Lab=np.array([36.18378647, 40.75048793, 18.33517831]), C=44.685355882758152), VS_ColorimetryData( name='VS2', XYZ=np.array([0.3465208, 0.27550838, 0.08903238]), Lab=np.array([59.48075944, 31.81535155, 43.03027426]), C=53.514681133664730), VS_ColorimetryData( name='VS3', XYZ=np.array([0.41042219, 0.38688299, 0.06618968]), Lab=np.array([68.5248742, 13.56049316, 66.82043633]), C=68.182532115437340), VS_ColorimetryData( name='VS4', XYZ=np.array([0.45420723, 0.50405653, 0.08194422]), Lab=np.array([76.31757819, -7.04196646, 74.43516148]), C=74.767523404153394), VS_ColorimetryData( name='VS5', XYZ=np.array([0.42407924, 0.5285824, 0.11437796]), Lab=np.array([77.79122799, -22.23481106, 67.01388407]), C=70.606284995201392), VS_ColorimetryData( name='VS6', XYZ=np.array([0.26139991, 0.36817885, 0.11429053]), Lab=np.array([67.14017484, -33.23131787, 48.67413226]), C=58.936335472298275), VS_ColorimetryData( name='VS7', XYZ=np.array([0.14989922, 0.24926212, 0.13823798]), Lab=np.array([57.00345599, -44.54988535, 24.99942632]), C=51.084866649348065), VS_ColorimetryData( name='VS8', XYZ=np.array([0.15841745, 0.24152639, 0.2693145]), Lab=np.array([56.24029678, -36.23772472, -1.42733192]), C=36.265823711788478), VS_ColorimetryData( name='VS9', XYZ=np.array([0.18662804, 0.24704107, 0.40046303]), Lab=np.array([56.78597628, -23.14117544, -18.29881115]), C=29.501872653031871), VS_ColorimetryData( name='VS10', XYZ=np.array([0.13339873, 0.15690626, 0.38428046]), Lab=np.array([46.56595559, -9.85970727, -33.95598605]), C=35.358490015776226), VS_ColorimetryData( name='VS11', XYZ=np.array([0.09902437, 0.09951361, 0.32046526]), Lab=np.array([37.75499466, 3.55194161, -40.81669619]), C=40.970952848102279), VS_ColorimetryData( name='VS12', XYZ=np.array([0.11579654, 0.09612863, 0.31943786]), Lab=np.array([37.1384526, 18.80505207, -41.7368833]), C=45.777695561949436), VS_ColorimetryData( name='VS13', XYZ=np.array([0.20977187, 0.16844709, 0.37299873]), Lab=np.array([48.06376988, 26.00174066, -29.97180426]), C=39.678704214193381), VS_ColorimetryData( name='VS14', XYZ=np.array([0.32294822, 0.2416386, 0.3623672]), Lab=np.array([56.25148226, 37.44488177, -14.50799142]), C=40.157203412534642), VS_ColorimetryData( name='VS15', XYZ=np.array([0.22031646, 0.15367587, 0.17564225]), Lab=np.array([46.13360422, 39.30141636, -2.12353664]), C=39.358744081490819) ], [ VS_ColorimetryData( name='VS1', XYZ=np.array([0.19305453, 0.11049115, 0.04885406]), Lab=np.array([39.6630702, 53.96236472, 24.65588837]), C=59.328320706285552), VS_ColorimetryData( name='VS2', XYZ=np.array([0.37202688, 0.27411307, 0.08885906]), Lab=np.array([59.35311972, 40.92204723, 42.86676601]), C=59.263594035249184), VS_ColorimetryData( name='VS3', XYZ=np.array([0.42075427, 0.37269638, 0.06621283]), Lab=np.array([67.47883546, 21.21408713, 65.00772248]), C=68.381587244419947), VS_ColorimetryData( name='VS4', XYZ=np.array([0.4619684, 0.49480415, 0.08591535]), Lab=np.array([75.74923125, -2.37840511, 72.10802547]), C=72.147239367349073), VS_ColorimetryData( name='VS5', XYZ=np.array([0.40817249, 0.508617, 0.11898836]), Lab=np.array([76.59515887, -21.91694373, 63.69607847]), C=67.361285873493216), VS_ColorimetryData( name='VS6', XYZ=np.array([0.24671064, 0.36211041, 0.11980563]), Lab=np.array([66.68086148, -37.45951274, 46.38328397]), C=59.620668618676035), VS_ColorimetryData( name='VS7', XYZ=np.array([0.1395656, 0.25329693, 0.14475636]), Lab=np.array([57.39525162, -52.59412462, 24.11379331]), C=57.858594631617656), VS_ColorimetryData( name='VS8', XYZ=np.array([0.15185552, 0.25077644, 0.28171872]), Lab=np.array([57.15099443, -44.01580867, -1.76234921]), C=44.051075894515222), VS_ColorimetryData( name='VS9', XYZ=np.array([0.1814817, 0.25847202, 0.41337786]), Lab=np.array([57.89173046, -30.60335063, -17.92176409]), C=35.464837486147871), VS_ColorimetryData( name='VS10', XYZ=np.array([0.1314732, 0.16804591, 0.39334961]), Lab=np.array([48.0128709, -17.35259857, -32.5683723]), C=36.902730949943731), VS_ColorimetryData( name='VS11', XYZ=np.array([0.0972772, 0.10656633, 0.32348741]), Lab=np.array([38.99602774, -3.18915863, -39.09532221]), C=39.225182616838175), VS_ColorimetryData( name='VS12', XYZ=np.array([0.11499913, 0.09966411, 0.31524145]), Lab=np.array([37.78207842, 15.46056944, -40.04065396]), C=42.921826345692601), VS_ColorimetryData( name='VS13', XYZ=np.array([0.23126112, 0.17972713, 0.36052054]), Lab=np.array([49.46299499, 29.95421157, -25.97562318]), C=39.648301227414578), VS_ColorimetryData( name='VS14', XYZ=np.array([0.35886253, 0.2560872, 0.35532873]), Lab=np.array([57.66377054, 43.8380947, -11.16664308]), C=45.237953807645169), VS_ColorimetryData( name='VS15', XYZ=np.array([0.26550827, 0.17191964, 0.17308227]), Lab=np.array([48.50100521, 48.80442473, 2.49156155]), C=48.86798289755771) ])) specification_t = colour_quality_scale( ILLUMINANTS_SDS['FL1'], additional_data=True, method='NIST CQS 9.0') np.testing.assert_almost_equal( [ data.Q_a for _index, data in sorted(specification_r.Q_as.items()) ], [ data.Q_a for _index, data in sorted(specification_t.Q_as.items()) ], decimal=7, )
def plot_multi_sds_colour_quality_scales_bars(sds, method='NIST CQS 9.0', **kwargs): """ Plots the *Colour Quality Scale* (CQS) of given illuminants or light sources spectral distributions. Parameters ---------- sds : array_like or MultiSpectralDistributions Spectral distributions or multi-spectral distributions to plot. `sds` can be a single :class:`colour.MultiSpectralDistributions` class instance, a list of :class:`colour.MultiSpectralDistributions` class instances or a list of :class:`colour.SpectralDistribution` class instances. method : unicode, optional **{NIST CQS 7.4'}**, *Colour Quality Scale* (CQS) computation method. Other Parameters ---------------- \\**kwargs : dict, optional {:func:`colour.plotting.artist`, :func:`colour.plotting.quality.plot_colour_quality_bars`, :func:`colour.plotting.render`}, Please refer to the documentation of the previously listed definitions. labels : bool, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Add labels above bars. hatching : bool or None, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Use hatching for the bars. hatching_repeat : int, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Hatching pattern repeat. Returns ------- tuple Current figure and axes. Examples -------- >>> from colour import (ILLUMINANTS_SDS, ... LIGHT_SOURCES_SDS) >>> illuminant = ILLUMINANTS_SDS['FL2'] >>> light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source]) ... # doctest: +ELLIPSIS (<Figure size ... with 1 Axes>, \ <matplotlib.axes._subplots.AxesSubplot object at 0x...>) .. image:: ../_static/Plotting_\ Plot_Multi_SDS_Colour_Quality_Scales_Bars.png :align: center :alt: plot_multi_sds_colour_quality_scales_bars """ sds = sds_and_multi_sds_to_sds(sds) settings = dict(kwargs) settings.update({'standalone': False}) specifications = [colour_quality_scale(sd, True, method) for sd in sds] _figure, axes = plot_colour_quality_bars(specifications, **settings) title = 'Colour Quality Scale - {0}'.format(', '.join( [sd.strict_name for sd in sds])) settings = {'axes': axes, 'title': title} settings.update(kwargs) return render(**settings)
def plot_multi_sds_colour_quality_scales_bars(sds, method='NIST CQS 7.4', **kwargs): """ Plots the *Colour Quality Scale* (CQS) of given illuminants or light sources spectral distributions. Parameters ---------- sds : array_like Array of illuminants or light sources spectral distributions to plot the *Colour Quality Scale* (CQS). method : unicode, optional **{NIST CQS 7.4'}**, *Colour Quality Scale* (CQS) computation method. Other Parameters ---------------- \\**kwargs : dict, optional {:func:`colour.plotting.artist`, :func:`colour.plotting.quality.plot_colour_quality_bars`, :func:`colour.plotting.render`}, Please refer to the documentation of the previously listed definitions. labels : bool, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Add labels above bars. hatching : bool or None, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Use hatching for the bars. hatching_repeat : int, optional {:func:`colour.plotting.quality.plot_colour_quality_bars`}, Hatching pattern repeat. Returns ------- tuple Current figure and axes. Examples -------- >>> from colour import (ILLUMINANTS_SDS, ... LIGHT_SOURCES_SDS) >>> illuminant = ILLUMINANTS_SDS['FL2'] >>> light_source = LIGHT_SOURCES_SDS['Kinoton 75P'] >>> plot_multi_sds_colour_quality_scales_bars([illuminant, light_source]) ... # doctest: +SKIP .. image:: ../_static/Plotting_\ Plot_Multi_SDs_Colour_Quality_Scales_Bars.png :align: center :alt: plot_multi_sds_colour_quality_scales_bars """ settings = dict(kwargs) settings.update({'standalone': False}) specifications = [colour_quality_scale(sd, True, method) for sd in sds] _figure, axes = plot_colour_quality_bars(specifications, **settings) title = 'Colour Quality Scale - {0}'.format(', '.join( [sd.strict_name for sd in sds])) settings = {'axes': axes, 'title': title} settings.update(kwargs) return render(**settings)
def test_colour_quality_scale(self): """ Tests :func:`colour.quality.cqs.colour_quality_scale` definition. """ self.assertAlmostEqual( colour_quality_scale(ILLUMINANTS_SDS['FL1']), 74.933405395713180, places=7) self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_SDS['FL1'], method='NIST CQS 7.4'), 75.332008182589348, places=7) self.assertAlmostEqual( colour_quality_scale(ILLUMINANTS_SDS['FL2']), 64.017283509280588, places=7) self.assertAlmostEqual( colour_quality_scale( ILLUMINANTS_SDS['FL2'], method='NIST CQS 7.4'), 64.686339173112856, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['Neodimium Incandescent']), 89.693921013642381, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['Neodimium Incandescent'], method='NIST CQS 7.4'), 87.655035241231985, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)']), 84.878441814420910, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['F32T8/TL841 (Triphosphor)'], method='NIST CQS 7.4'), 83.179881092827671, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['H38HT-100 (Mercury)']), 19.836071708638958, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['H38HT-100 (Mercury)'], method='NIST CQS 7.4'), 22.860610106043985, places=7) self.assertAlmostEqual( colour_quality_scale(LIGHT_SOURCES_SDS['Luxeon WW 2880']), 86.491761709787994, places=7) self.assertAlmostEqual( colour_quality_scale( LIGHT_SOURCES_SDS['Luxeon WW 2880'], method='NIST CQS 7.4'), 84.879524259605077, places=7)
def generate_documentation_plots(output_directory: str): """ Generate documentation plots. Parameters ---------- output_directory Output directory. """ filter_warnings() colour_style() np.random.seed(0) # ************************************************************************* # "README.rst" # ************************************************************************* filename = os.path.join( output_directory, "Examples_Colour_Automatic_Conversion_Graph.png" ) plot_automatic_colour_conversion_graph(filename) arguments = { "tight_layout": True, "transparent_background": True, "filename": os.path.join( output_directory, "Examples_Plotting_Visible_Spectrum.png" ), } plt.close( plot_visible_spectrum( "CIE 1931 2 Degree Standard Observer", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Illuminant_F1_SD.png" ) plt.close(plot_single_illuminant_sd("FL1", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Blackbodies.png" ) blackbody_sds = [ sd_blackbody(i, SpectralShape(0, 10000, 10)) for i in range(1000, 15000, 1000) ] plt.close( plot_multi_sds( blackbody_sds, y_label="W / (sr m$^2$) / m", plot_kwargs={"use_sd_colours": True, "normalise_sd_colours": True}, legend_location="upper right", bounding_box=(0, 1250, 0, 2.5e6), **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Cone_Fundamentals.png" ) plt.close( plot_single_cmfs( "Stockman & Sharpe 2 Degree Cone Fundamentals", y_label="Sensitivity", bounding_box=(390, 870, 0, 1.1), **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Luminous_Efficiency.png" ) plt.close( plot_multi_sds( ( sd_mesopic_luminous_efficiency_function(0.2), SDS_LEFS_PHOTOPIC["CIE 1924 Photopic Standard Observer"], SDS_LEFS_SCOTOPIC["CIE 1951 Scotopic Standard Observer"], ), y_label="Luminous Efficiency", legend_location="upper right", y_tighten=True, margins=(0, 0, 0, 0.1), **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_BabelColor_Average.png" ) plt.close( plot_multi_sds( SDS_COLOURCHECKERS["BabelColor Average"].values(), plot_kwargs={"use_sd_colours": True}, title=("BabelColor Average - " "Spectral Distributions"), **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_ColorChecker_2005.png" ) plt.close( plot_single_colour_checker( "ColorChecker 2005", text_kwargs={"visible": False}, **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Chromaticities_Prediction.png" ) plt.close( plot_corresponding_chromaticities_prediction( 2, "Von Kries", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Chromaticities_CIE_1931_Chromaticity_Diagram.png", ) RGB = np.random.random((32, 32, 3)) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931( RGB, "ITU-R BT.709", colourspaces=["ACEScg", "S-Gamut"], show_pointer_gamut=True, **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_CRI.png" ) plt.close( plot_single_sd_colour_rendering_index_bars( SDS_ILLUMINANTS["FL2"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Colour_Rendition_Report.png" ) plt.close( plot_single_sd_colour_rendition_report( SDS_ILLUMINANTS["FL2"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Plot_Visible_Spectrum_Section.png" ) plt.close( plot_visible_spectrum_section( section_colours="RGB", section_opacity=0.15, **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_Plot_RGB_Colourspace_Section.png" ) plt.close( plot_RGB_colourspace_section( "sRGB", section_colours="RGB", section_opacity=0.15, **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Examples_Plotting_CCT_CIE_1960_UCS_Chromaticity_Diagram.png", ) plt.close( plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS( ["A", "B", "C"], **arguments )[0] ) # ************************************************************************* # Documentation # ************************************************************************* arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_CVD_Simulation_Machado2009.png" ) plt.close(plot_cvd_simulation_Machado2009(RGB, **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Colour_Checker.png" ) plt.close(plot_single_colour_checker("ColorChecker 2005", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Colour_Checkers.png" ) plt.close( plot_multi_colour_checkers( ["ColorChecker 1976", "ColorChecker 2005"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD.png" ) data = { 500: 0.0651, 520: 0.0705, 540: 0.0772, 560: 0.0870, 580: 0.1128, 600: 0.1360, } sd = SpectralDistribution(data, name="Custom") plt.close(plot_single_sd(sd, **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_SDS.png" ) data_1 = { 500: 0.004900, 510: 0.009300, 520: 0.063270, 530: 0.165500, 540: 0.290400, 550: 0.433450, 560: 0.594500, } data_2 = { 500: 0.323000, 510: 0.503000, 520: 0.710000, 530: 0.862000, 540: 0.954000, 550: 0.994950, 560: 0.995000, } spd1 = SpectralDistribution(data_1, name="Custom 1") spd2 = SpectralDistribution(data_2, name="Custom 2") plt.close(plot_multi_sds([spd1, spd2], **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_CMFS.png" ) plt.close( plot_single_cmfs("CIE 1931 2 Degree Standard Observer", **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_CMFS.png" ) cmfs = ( "CIE 1931 2 Degree Standard Observer", "CIE 1964 10 Degree Standard Observer", ) plt.close(plot_multi_cmfs(cmfs, **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Illuminant_SD.png" ) plt.close(plot_single_illuminant_sd("A", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Illuminant_SDS.png" ) plt.close(plot_multi_illuminant_sds(["A", "B", "C"], **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Visible_Spectrum.png" ) plt.close(plot_visible_spectrum(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Lightness_Function.png" ) plt.close(plot_single_lightness_function("CIE 1976", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Lightness_Functions.png" ) plt.close( plot_multi_lightness_functions( ["CIE 1976", "Wyszecki 1963"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Luminance_Function.png" ) plt.close(plot_single_luminance_function("CIE 1976", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Luminance_Functions.png" ) plt.close( plot_multi_luminance_functions( ["CIE 1976", "Newhall 1943"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Blackbody_Spectral_Radiance.png" ) plt.close( plot_blackbody_spectral_radiance( 3500, blackbody="VY Canis Major", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Blackbody_Colours.png" ) plt.close( plot_blackbody_colours(SpectralShape(150, 12500, 50), **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Colour_Swatch.png" ) RGB = ColourSwatch((0.45620519, 0.03081071, 0.04091952)) plt.close(plot_single_colour_swatch(RGB, **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Colour_Swatches.png" ) RGB_1 = ColourSwatch((0.45293517, 0.31732158, 0.26414773)) RGB_2 = ColourSwatch((0.77875824, 0.57726450, 0.50453169)) plt.close(plot_multi_colour_swatches([RGB_1, RGB_2], **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Function.png" ) plt.close(plot_single_function(lambda x: x ** (1 / 2.2), **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Functions.png" ) functions = { "Gamma 2.2": lambda x: x ** (1 / 2.2), "Gamma 2.4": lambda x: x ** (1 / 2.4), "Gamma 2.6": lambda x: x ** (1 / 2.6), } plt.close(plot_multi_functions(functions, **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Image.png" ) path = os.path.join( colour.__path__[0], "examples", "plotting", "resources", "Ishihara_Colour_Blindness_Test_Plate_3.png", ) plt.close(plot_image(read_image(str(path)), **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Corresponding_Chromaticities_Prediction.png", ) plt.close( plot_corresponding_chromaticities_prediction( 1, "Von Kries", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Spectral_Locus.png" ) plt.close( plot_spectral_locus(spectral_locus_colours="RGB", **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Chromaticity_Diagram_Colours.png" ) plt.close( plot_chromaticity_diagram_colours(diagram_colours="RGB", **arguments)[ 0 ] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Chromaticity_Diagram.png" ) plt.close(plot_chromaticity_diagram(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Chromaticity_Diagram_CIE1931.png" ) plt.close(plot_chromaticity_diagram_CIE1931(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Chromaticity_Diagram_CIE1960UCS.png" ) plt.close(plot_chromaticity_diagram_CIE1960UCS(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Chromaticity_Diagram_CIE1976UCS.png" ) plt.close(plot_chromaticity_diagram_CIE1976UCS(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_SDS_In_Chromaticity_Diagram.png" ) A = SDS_ILLUMINANTS["A"] D65 = SDS_ILLUMINANTS["D65"] plt.close(plot_sds_in_chromaticity_diagram([A, D65], **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1931.png", ) plt.close( plot_sds_in_chromaticity_diagram_CIE1931([A, D65], **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1960UCS.png", ) plt.close( plot_sds_in_chromaticity_diagram_CIE1960UCS([A, D65], **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_SDS_In_Chromaticity_Diagram_CIE1976UCS.png", ) plt.close( plot_sds_in_chromaticity_diagram_CIE1976UCS([A, D65], **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Pointer_Gamut.png" ) plt.close(plot_pointer_gamut(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram.png", ) plt.close( plot_RGB_colourspaces_in_chromaticity_diagram( ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspaces_In_Chromaticity_Diagram_CIE1931.png", ) plt.close( plot_RGB_colourspaces_in_chromaticity_diagram_CIE1931( ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspaces_In_" "Chromaticity_Diagram_CIE1960UCS.png", ) plt.close( plot_RGB_colourspaces_in_chromaticity_diagram_CIE1960UCS( ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspaces_In_" "Chromaticity_Diagram_CIE1976UCS.png", ) plt.close( plot_RGB_colourspaces_in_chromaticity_diagram_CIE1976UCS( ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Chromaticities_In_" "Chromaticity_Diagram.png", ) RGB = np.random.random((128, 128, 3)) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram( RGB, "ITU-R BT.709", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Chromaticities_In_" "Chromaticity_Diagram_CIE1931.png", ) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931( RGB, "ITU-R BT.709", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Chromaticities_In_" "Chromaticity_Diagram_CIE1960UCS.png", ) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1960UCS( RGB, "ITU-R BT.709", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Chromaticities_In_" "Chromaticity_Diagram_CIE1976UCS.png", ) plt.close( plot_RGB_chromaticities_in_chromaticity_diagram_CIE1976UCS( RGB, "ITU-R BT.709", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Ellipses_MacAdam1942_In_Chromaticity_Diagram.png", ) plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram(**arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Ellipses_MacAdam1942_In_" "Chromaticity_Diagram_CIE1931.png", ) plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1931(**arguments)[ 0 ] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Ellipses_MacAdam1942_In_" "Chromaticity_Diagram_CIE1960UCS.png", ) plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1960UCS( **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Ellipses_MacAdam1942_In_" "Chromaticity_Diagram_CIE1976UCS.png", ) plt.close( plot_ellipses_MacAdam1942_in_chromaticity_diagram_CIE1976UCS( **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_CCTF.png" ) plt.close(plot_single_cctf("ITU-R BT.709", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_CCTFs.png" ) plt.close(plot_multi_cctfs(["ITU-R BT.709", "sRGB"], **arguments)[0]) data = np.array( [ [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.40920000, 0.28120000, 0.30600000]), np.array( [ [0.02495100, 0.01908600, 0.02032900], [0.10944300, 0.06235900, 0.06788100], [0.27186500, 0.18418700, 0.19565300], [0.48898900, 0.40749400, 0.44854600], ] ), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.30760000, 0.48280000, 0.42770000]), np.array( [ [0.02108000, 0.02989100, 0.02790400], [0.06194700, 0.11251000, 0.09334400], [0.15255800, 0.28123300, 0.23234900], [0.34157700, 0.56681300, 0.47035300], ] ), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.39530000, 0.28120000, 0.18450000]), np.array( [ [0.02436400, 0.01908600, 0.01468800], [0.10331200, 0.06235900, 0.02854600], [0.26311900, 0.18418700, 0.12109700], [0.43158700, 0.40749400, 0.39008600], ] ), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.20510000, 0.18420000, 0.57130000]), np.array( [ [0.03039800, 0.02989100, 0.06123300], [0.08870000, 0.08498400, 0.21843500], [0.18405800, 0.18418700, 0.40111400], [0.32550100, 0.34047200, 0.50296900], [0.53826100, 0.56681300, 0.80010400], ] ), None, ], [ None, np.array([0.95010000, 1.00000000, 1.08810000]), np.array([0.35770000, 0.28120000, 0.11250000]), np.array( [ [0.03678100, 0.02989100, 0.01481100], [0.17127700, 0.11251000, 0.01229900], [0.30080900, 0.28123300, 0.21229800], [0.52976000, 0.40749400, 0.11720000], ] ), None, ], ] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Constant_Hue_Loci.png" ) plt.close(plot_constant_hue_loci(data, "IPT", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_Munsell_Value_Function.png" ) plt.close(plot_single_munsell_value_function("ASTM D1535", **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_Munsell_Value_Functions.png" ) plt.close( plot_multi_munsell_value_functions( ["ASTM D1535", "McCamy 1987"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD_Rayleigh_Scattering.png" ) plt.close(plot_single_sd_rayleigh_scattering(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_The_Blue_Sky.png" ) plt.close(plot_the_blue_sky(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Colour_Quality_Bars.png" ) illuminant = SDS_ILLUMINANTS["FL2"] light_source = SDS_LIGHT_SOURCES["Kinoton 75P"] light_source = light_source.copy().align(SpectralShape(360, 830, 1)) cqs_i = colour_quality_scale(illuminant, additional_data=True) cqs_l = colour_quality_scale(light_source, additional_data=True) plt.close(plot_colour_quality_bars([cqs_i, cqs_l], **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD_Colour_Rendering_Index_Bars.png", ) illuminant = SDS_ILLUMINANTS["FL2"] plt.close( plot_single_sd_colour_rendering_index_bars(illuminant, **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_SDS_Colour_Rendering_Indexes_Bars.png", ) light_source = SDS_LIGHT_SOURCES["Kinoton 75P"] plt.close( plot_multi_sds_colour_rendering_indexes_bars( [illuminant, light_source], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD_Colour_Quality_Scale_Bars.png", ) illuminant = SDS_ILLUMINANTS["FL2"] plt.close( plot_single_sd_colour_quality_scale_bars(illuminant, **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Multi_SDS_Colour_Quality_Scales_Bars.png", ) light_source = SDS_LIGHT_SOURCES["Kinoton 75P"] plt.close( plot_multi_sds_colour_quality_scales_bars( [illuminant, light_source], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Hull_Section_Colours.png" ) vertices, faces, _outline = primitive_cube(1, 1, 1, 64, 64, 64) XYZ_vertices = RGB_to_XYZ( vertices["position"] + 0.5, RGB_COLOURSPACE_sRGB.whitepoint, RGB_COLOURSPACE_sRGB.whitepoint, RGB_COLOURSPACE_sRGB.matrix_RGB_to_XYZ, ) hull = trimesh.Trimesh(XYZ_vertices, faces, process=False) plt.close( plot_hull_section_colours(hull, section_colours="RGB", **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Hull_Section_Contour.png" ) plt.close( plot_hull_section_contour(hull, section_colours="RGB", **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Visible_Spectrum_Section.png" ) plt.close( plot_visible_spectrum_section( section_colours="RGB", section_opacity=0.15, **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspace_Section.png" ) plt.close( plot_RGB_colourspace_section( "sRGB", section_colours="RGB", section_opacity=0.15, **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Planckian_Locus.png" ) plt.close( plot_planckian_locus(planckian_locus_colours="RGB", **arguments)[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram.png", ) plt.close( plot_planckian_locus_in_chromaticity_diagram( ["A", "B", "C"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1931.png", ) plt.close( plot_planckian_locus_in_chromaticity_diagram_CIE1931( ["A", "B", "C"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Planckian_Locus_In_Chromaticity_Diagram_CIE1960UCS.png", ) plt.close( plot_planckian_locus_in_chromaticity_diagram_CIE1960UCS( ["A", "B", "C"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD_Colour_Rendition_Report_Full.png", ) plt.close( plot_single_sd_colour_rendition_report( SDS_ILLUMINANTS["FL2"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD_Colour_Rendition_Report_Intermediate.png", ) plt.close( plot_single_sd_colour_rendition_report( SDS_ILLUMINANTS["FL2"], "Intermediate", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_Single_SD_Colour_Rendition_Report_Simple.png", ) plt.close( plot_single_sd_colour_rendition_report( SDS_ILLUMINANTS["FL2"], "Simple", **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspaces_Gamuts.png" ) plt.close( plot_RGB_colourspaces_gamuts( ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Colourspaces_Gamuts.png" ) plt.close( plot_RGB_colourspaces_gamuts( ["ITU-R BT.709", "ACEScg", "S-Gamut"], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Plotting_Plot_RGB_Scatter.png" ) plt.close(plot_RGB_scatter(RGB, "ITU-R BT.709", **arguments)[0]) filename = os.path.join( output_directory, "Plotting_Plot_Colour_Automatic_Conversion_Graph.png" ) plot_automatic_colour_conversion_graph(filename) # ************************************************************************* # "tutorial.rst" # ************************************************************************* arguments["filename"] = os.path.join( output_directory, "Tutorial_Visible_Spectrum.png" ) plt.close(plot_visible_spectrum(**arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Tutorial_Sample_SD.png" ) sample_sd_data = { 380: 0.048, 385: 0.051, 390: 0.055, 395: 0.060, 400: 0.065, 405: 0.068, 410: 0.068, 415: 0.067, 420: 0.064, 425: 0.062, 430: 0.059, 435: 0.057, 440: 0.055, 445: 0.054, 450: 0.053, 455: 0.053, 460: 0.052, 465: 0.052, 470: 0.052, 475: 0.053, 480: 0.054, 485: 0.055, 490: 0.057, 495: 0.059, 500: 0.061, 505: 0.062, 510: 0.065, 515: 0.067, 520: 0.070, 525: 0.072, 530: 0.074, 535: 0.075, 540: 0.076, 545: 0.078, 550: 0.079, 555: 0.082, 560: 0.087, 565: 0.092, 570: 0.100, 575: 0.107, 580: 0.115, 585: 0.122, 590: 0.129, 595: 0.134, 600: 0.138, 605: 0.142, 610: 0.146, 615: 0.150, 620: 0.154, 625: 0.158, 630: 0.163, 635: 0.167, 640: 0.173, 645: 0.180, 650: 0.188, 655: 0.196, 660: 0.204, 665: 0.213, 670: 0.222, 675: 0.231, 680: 0.242, 685: 0.251, 690: 0.261, 695: 0.271, 700: 0.282, 705: 0.294, 710: 0.305, 715: 0.318, 720: 0.334, 725: 0.354, 730: 0.372, 735: 0.392, 740: 0.409, 745: 0.420, 750: 0.436, 755: 0.450, 760: 0.462, 765: 0.465, 770: 0.448, 775: 0.432, 780: 0.421, } sd = SpectralDistribution(sample_sd_data, name="Sample") plt.close(plot_single_sd(sd, **arguments)[0]) arguments["filename"] = os.path.join( output_directory, "Tutorial_SD_Interpolation.png" ) sd_copy = sd.copy() sd_copy.interpolate(SpectralShape(400, 770, 1)) plt.close( plot_multi_sds( [sd, sd_copy], bounding_box=[730, 780, 0.25, 0.5], **arguments )[0] ) arguments["filename"] = os.path.join( output_directory, "Tutorial_Sample_Swatch.png" ) sd = SpectralDistribution(sample_sd_data) cmfs = MSDS_CMFS_STANDARD_OBSERVER["CIE 1931 2 Degree Standard Observer"] illuminant = SDS_ILLUMINANTS["D65"] with domain_range_scale("1"): XYZ = sd_to_XYZ(sd, cmfs, illuminant) RGB = XYZ_to_sRGB(XYZ) plt.close( plot_single_colour_swatch( ColourSwatch(RGB, "Sample"), text_kwargs={"size": "x-large"}, **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Tutorial_Neutral5.png" ) patch_name = "neutral 5 (.70 D)" patch_sd = SDS_COLOURCHECKERS["ColorChecker N Ohta"][patch_name] with domain_range_scale("1"): XYZ = sd_to_XYZ(patch_sd, cmfs, illuminant) RGB = XYZ_to_sRGB(XYZ) plt.close( plot_single_colour_swatch( ColourSwatch(RGB, patch_name.title()), text_kwargs={"size": "x-large"}, **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Tutorial_Colour_Checker.png" ) plt.close( plot_single_colour_checker( colour_checker="ColorChecker 2005", text_kwargs={"visible": False}, **arguments, )[0] ) arguments["filename"] = os.path.join( output_directory, "Tutorial_CIE_1931_Chromaticity_Diagram.png" ) xy = XYZ_to_xy(XYZ) plot_chromaticity_diagram_CIE1931(standalone=False) x, y = xy plt.plot(x, y, "o-", color="white") # Annotating the plot. plt.annotate( patch_sd.name.title(), xy=xy, xytext=(-50, 30), textcoords="offset points", arrowprops=dict(arrowstyle="->", connectionstyle="arc3, rad=-0.2"), ) plt.close( render( standalone=True, limits=(-0.1, 0.9, -0.1, 0.9), x_tighten=True, y_tighten=True, **arguments, )[0] ) # ************************************************************************* # "basics.rst" # ************************************************************************* arguments["filename"] = os.path.join( output_directory, "Basics_Logo_Small_001_CIE_XYZ.png" ) RGB = read_image(os.path.join(output_directory, "Logo_Small_001.png"))[ ..., 0:3 ] XYZ = sRGB_to_XYZ(RGB) plt.close( plot_image(XYZ, text_kwargs={"text": "sRGB to XYZ"}, **arguments)[0] )