Skip to content
Related Articles

Related Articles

Matplotlib.colors.SymLogNorm class in Python

View Discussion
Improve Article
Save Article
  • Last Updated : 27 Jan, 2022
View Discussion
Improve Article
Save Article

Matplotlib is an amazing visualization library in Python for 2D plots of arrays. Matplotlib is a multi-platform data visualization library built on NumPy arrays and designed to work with the broader SciPy stack.

Note: For more information, refer to Python Matplotlib – An Overview


The matplotlib.colors.SysLogNorm class belongs to the matplotlib.colors module. The matplotlib.colors module is used for converting color or numbers arguments to RGBA or RGB.This module is used for mapping numbers to colors or color specification conversion in a 1-D array of colors also known as colormap.

The matplotlib.colors.SymLogNorm class is used for symmetric logarithmic scaling to both positive and negative direction from the origin. As value close to the range of zero tend towards infinity, there rose a need to have a linear range around zero. The range under which the plot is linear is called linthresh. The linear range (-linthresh to +linthresh) is stretched relative to the logarithmic range by the help of linscale. The number of decades to use for each half of the linear range is its value. For instance if linscale==1.0(this is also the default), the space covered for the positive and negative halves of the linear range is equivalent to one decade in the range that is logarithmic in nature.

Methods of the class:

  1. autoscale(self, A): It is used to set the Vmax and Vmin of A.
  2. autoscale_None(self, A): It is used to autoscale the vmax vmin that has None as its value.
  3. inverse(self, value): it returns the logarithmic inverse of the value.

Example 1:


import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
# SymLogNorm: two humps, one 
# negative and one positive
N = 100
A, B = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)]
C1 = np.exp(-A**2 - B**2)
C2 = np.exp(-(A - 1)**2 - (B - 1)**2)
C = (C1 - C2) * 2
figure, axes = plt.subplots(2, 1)
pcm = axes[0].pcolormesh(A, B, C,
                       norm = colors.SymLogNorm(linthresh = 0.03,
                                                linscale = 0.03,
                                                vmin =-1.0
                                                vmax = 1.0),
                       cmap ='RdBu_r')
figure.colorbar(pcm, ax = axes[0], extend ='both')
pcm = axes[1].pcolormesh(A, B, C, 
                         cmap ='RdBu_r',
                         vmin =-np.max(C))
figure.colorbar(pcm, ax = axes[1],
                extend ='both')


Example 2:


import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors, ticker
# helper function to 
# show syslognorm in action
def symlog(arr, vmin = None, vmax = None,
           logthresh = 5, logstep = 1,
           linscale = 1, **kwargs):
    vmin = arr.min() if vmin is None else vmin
    vmax = arr.max() if vmax is None else vmax
    image = plt.imshow(arr,
                       vmin = float(vmin),
                       vmax = float(vmax),
                       norm = colors.SymLogNorm(10**-logthresh,
                                                linscale = linscale),
    maxlog = int(np.ceil(np.log10(vmax)))
    minlog = int(np.ceil(np.log10(-vmin)))
    # generate logarithmic ticks
    tick_locations =([-(10**x) for x in range(-logthresh,
                                             minlog + 1,
                    +[(10**x) for x in range(-logthresh,
                                             maxlog + 1,
                                             logstep)] )
    cb = plt.colorbar(ticks = tick_locations, 
                    format = ticker.LogFormatter())
    return image, cb
data = np.arange(4).reshape(-1, 1)+np.arange(4).reshape(1, -1)
data = 10**(data / 2.)
data2 = data - data[::-1, ::-1]
plt.figure(figsize =(4, 3))  
image, cb = symlog(data2, interpolation ="None",
                   cmap ="gray", logthresh = 0)


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!