How to plot multiple RGB coordinates in chromaticity diagram

3.9k Views Asked by At

I am facing some problems with plotting RGB values into a chromaticity diagram:

I have some different RGB values and I want to plot them into a chromaticity diagram to make them visual. I want to make them visual because of I have to presentate them and I want that everyone can see the colordifference.

With the colour package in Python I can make the chromaticity diagram and I can plot 1 RGB value. When I add some more RGB value I get an error.

This is my code:

import numpy as np
from colour.plotting import *

RGB = np.array([79, 2, 45], [87, 12, 67])

plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(
    RGB,)

And I receive this error:

Traceback (most recent call last): File "C:\Users\User\PycharmProjects\pythonProject4\Overige\Cie.py", line 8, in RGB = np.array([79, 2, 45], [87, 12, 67]) TypeError: Field elements must be 2- or 3-tuples, got '87

In this diagram I want to plot my RGB values: enter image description here

In total I would like to plot arround 20 RGB values into this diagram.

Can someone help me to fix this or is there a better/easier way to do this?

Thanks!

2

There are 2 best solutions below

0
Kel Solaar On BEST ANSWER

While @giacomo-catenazzi answer is correct, there is some more subtlety going on here.

The expectation for the colour.plotting.plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931 definition input is to be linear floating point RGB data, encoded using sRGB colourspace as a default.

Here, your RGB values are integer and could be 8-bit non-linearly encoded sRGB values, thus you might need to convert them to floating-point representation and decode them:

import colour
import numpy as np
from colour.plotting import *

RGB = colour.models.eotf_inverse_sRGB(np.array([[79, 2, 45], [87, 12, 67]]) / 255)

plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931(RGB)

CIE Chromaticity Diagram

Basically, you need to know how they have been encoded so that internally, the definition does the correct maths to present them.

0
Giacomo Catenazzi On

You are using np.array wrongly: instead of np.array([79, 2, 45], [87, 12, 67]), you should use np.array([[79, 2, 45], [87, 12, 67]]). Note that the first argument should contain the data, so you should define an array of an array, and not giving np.array a series of vectors.

The function plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931 can use the numpy array (I was wrong in comments), as you see in the example in plot_RGB_chromaticities_in_chromaticity_diagram_CIE1931 documentation.