Nicht-lineare Skalierung der Farbzuordnung der Kontrast erhöht werden

Den folgenden python-code erstellt eine heatmap einer matrix mit normal verteilten Werte

import numpy as np
from matplotlib import pylab as plt


np.random.seed(123) #make sure we all have same data
m = np.random.randn(200).reshape(10, 20)
plt.imshow(m, cmap='RdYlGn', interpolation='nearest')
plt.colorbar()

Dies ist die Ausgabe dieses Codes

Nicht-lineare Skalierung der Farbzuordnung der Kontrast erhöht werden

Ich würde wie um den Kontrast zu erhöhen dieses Bild von "fading out" der Werte nahe null.
Ich kann dies ganz einfach mit disigmoid Skalierung der original-Daten wie folgt:

def disigmoidScaling(values, steepnessFactor=1, ref=None):
    ''' Sigmoid scaling in which values around a reference point are flattened
    arround a reference point

    Scaled value y is calculated as 
        y = sign(v - d)(1 - exp(-((x - d)/s)**2)))
    where v is the original value,  d is the referenc point and s is the 
    steepness factor
    '''
    if ref is None:
        mn = np.min(values)
        mx = np.max(values)
        ref = mn + (mx - mn) / 2.0

    sgn = np.sign(values - ref)
    term1 = ((values - ref)/steepnessFactor) ** 2
    term2 = np.exp(- term1) 
    term3 = 1.0 - term2 
    return sgn * term3


plt.imshow(disigmoidScaling(m, 4), cmap='RdYlGn', interpolation='nearest')
plt.colorbar()

Hier ist die Ausgabe.

Nicht-lineare Skalierung der Farbzuordnung der Kontrast erhöht werden

Ich bin zufrieden mit dem Ergebnis, außer der Tatsache, dass in dieser version das original
Werte ausgetauscht worden sind, für gewählt werden.

Gibt es eine Möglichkeit, führen Sie eine nicht-lineare Zuordnung der Werte zu colormap?

Schreibe einen Kommentar