How to map number to color using matplotlib's colormap?

PythonMatplotlib

Python Problem Overview


Consider a variable x containing a floating point number. I want to use matplotlib's colormaps to map this number to a color, but not plot anything. Basically, I want to be able to choose the colormap with mpl.cm.autumn for example, use mpl.colors.Normalize(vmin = -20, vmax = 10) to set the range, and then map x to the corresponding color. But I really don't get the documentation of mpl.cm, so if anyone could give me a hint.

Python Solutions


Solution 1 - Python

It's as simple as cm.hot(0.3):

import matplotlib.cm as cm
    
print(cm.hot(0.3))
(0.8240081481370484, 0.0, 0.0, 1.0)

If you also want to have the normalizer, use

import matplotlib as mpl
import matplotlib.cm as cm
   
norm = mpl.colors.Normalize(vmin=-20, vmax=10)
cmap = cm.hot
x = 0.3

m = cm.ScalarMappable(norm=norm, cmap=cmap)
print(m.to_rgba(x))
(1.0, 0.8225486412996345, 0.0, 1.0)

Solution 2 - Python

You can get a color from a colormap by supplying an argument between 0 and 1, e.g. cm.autumn(0.5).

If there is a normalization instance in the game, use the return of the Normalization instead:

import matplotlib.cm as cm
from matplotlib.colors import Normalize

cmap = cm.autumn
norm = Normalize(vmin=-20, vmax=10)
print cmap(norm(5))

Solution 3 - Python

Number value to colormap color

import matplotlib.cm as cm
import matplotlib as matplotlib

def color_map_color(value, cmap_name='Wistia', vmin=0, vmax=1):
    # norm = plt.Normalize(vmin, vmax)
    norm = matplotlib.colors.Normalize(vmin=vmin, vmax=vmax)
    cmap = cm.get_cmap(cmap_name)  # PiYG
    rgb = cmap(norm(abs(value)))[:3]  # will return rgba, we take only first 3 so we get rgb
    color = matplotlib.colors.rgb2hex(rgb)
    return color

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPsirusView Question on Stackoverflow
Solution 1 - PythonDavid ZwickerView Answer on Stackoverflow
Solution 2 - PythonImportanceOfBeingErnestView Answer on Stackoverflow
Solution 3 - Pythonkhnh123View Answer on Stackoverflow