Dos mapas de colores diferentes en la misma imagen matplotlib

Supongamos el siguiente ejemplo.

import matplotlib.pyplot as plt import numpy as np v1 = -1 + 2*np.random.rand(50,150) fig = plt.figure() ax = fig.add_subplot(111) p = ax.imshow(v1,interpolation='nearest') cb = plt.colorbar(p,shrink=0.5) plt.xlabel('Day') plt.ylabel('Depth') cb.set_label('RWU') plt.show() 

Quiero mostrar los valores por debajo de cero en un mapa de colores diferente a los valores por encima de cero

En primer lugar, ¿es posible que solo desee utilizar un mapa de colores divergente, ‘neutral’ en cero, y divergir en dos colores distintos? Esto es un ejemplo:

 import matplotlib.pyplot as plt import numpy as np v1 = -1+2*np.random.rand(50,150) fig,ax = plt.subplots() p = ax.imshow(v1,interpolation='nearest',cmap=plt.cm.RdBu) cb = plt.colorbar(p,shrink=0.5) ax.set_xlabel('Day') ax.set_ylabel('Depth') cb.set_label('RWU') plt.show() 

introduzca la descripción de la imagen aquí

Si realmente desea utilizar dos mapas de colores diferentes, esta es una solución con matrices enmascaradas:

 import matplotlib.pyplot as plt import numpy as np from numpy.ma import masked_array v1 = -1+2*np.random.rand(50,150) v1a = masked_array(v1,v1<0) v1b = masked_array(v1,v1>=0) fig,ax = plt.subplots() pa = ax.imshow(v1a,interpolation='nearest',cmap=cm.Reds) cba = plt.colorbar(pa,shrink=0.25) pb = ax.imshow(v1b,interpolation='nearest',cmap=cm.winter) cbb = plt.colorbar(pb,shrink=0.25) plt.xlabel('Day') plt.ylabel('Depth') cba.set_label('positive') cbb.set_label('negative') plt.show() 

introduzca la descripción de la imagen aquí