colour.dominant_wavelength(xy: ArrayLike, xy_n: ArrayLike, cmfs: Optional[colour.colorimetry.spectrum.MultiSpectralDistributions] = None, inverse: bool = False) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray][source]

Return the dominant wavelength \(\lambda_d\) for given colour stimulus \(xy\) and the related \(xy_wl\) first and \(xy_{cw}\) second intersection coordinates with the spectral locus.

In the eventuality where the \(xy_wl\) first intersection coordinates are on the line of purples, the complementary wavelength will be computed in lieu.

The complementary wavelength is indicated by a negative sign and the \(xy_{cw}\) second intersection coordinates which are set by default to the same value than \(xy_wl\) first intersection coordinates will be set to the complementary dominant wavelength intersection coordinates with the spectral locus.

  • xy (ArrayLike) – Colour stimulus CIE xy chromaticity coordinates.

  • xy_n (ArrayLike) – Achromatic stimulus CIE xy chromaticity coordinates.

  • cmfs (Optional[colour.colorimetry.spectrum.MultiSpectralDistributions]) – Standard observer colour matching functions, default to the CIE 1931 2 Degree Standard Observer.

  • inverse (bool) – Inverse the computation direction to retrieve the complementary wavelength.


Dominant wavelength, first intersection point CIE xy chromaticity coordinates, second intersection point CIE xy chromaticity coordinates.

Return type



[CIET14804b], [Erdb]


Dominant wavelength computation:

>>> from colour.colorimetry import MSDS_CMFS
>>> from pprint import pprint
>>> cmfs = MSDS_CMFS['CIE 1931 2 Degree Standard Observer']
>>> xy = np.array([0.54369557, 0.32107944])
>>> xy_n = np.array([0.31270000, 0.32900000])
>>> pprint(dominant_wavelength(xy, xy_n, cmfs))  
 array([ 0.6835474...,  0.3162840...]),
 array([ 0.6835474...,  0.3162840...]))

Complementary dominant wavelength is returned if the first intersection is located on the line of purples:

>>> xy = np.array([0.37605506, 0.24452225])
>>> pprint(dominant_wavelength(xy, xy_n))  
 array([ 0.4572314...,  0.1362814...]),
 array([ 0.0104096...,  0.7320745...]))