2015-09-23 3 views
0

Есть ли способ циклического переключения, например. hsv colormap так, чтобы центральный цвет можно было изменить? Это занимает довольно много места в моей фигуре, и я хотел бы, чтобы это был другой цвет. Поскольку цветовая схема является циклической, это должно быть возможным.Циклическое смещение цветовой карты

ответ

1

На основе нелинейной палитры, используемой в этом example, но с линейными уровнями заменяет сдвиг,

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.colors import LinearSegmentedColormap 

class roll_cmap(LinearSegmentedColormap): 

    def __init__(self, cmap, shift): 

     assert 0. < shift < 1. 
     self.cmap = cmap 
     self.N = cmap.N 
     self.monochrome = self.cmap.monochrome 
     self._x = np.linspace(0.0, 1.0, 255) 
     self._y = np.roll(np.linspace(0.0, 1.0, 255),int(255.*shift)) 

    def __call__(self, xi, alpha=1.0, **kw): 
     yi = np.interp(xi, self._x, self._y) 
     return self.cmap(yi, alpha) 


if __name__ == '__main__': 

    y, x = np.mgrid[0.0:3.0:100j, 0.0:5.0:100j] 
    H = np.sin(8*x/np.pi) 

    cmap = plt.cm.hsv 
    cmap_rolled = roll_cmap(cmap, shift=0.8) 

    plt.subplot(2,1,1) 
    plt.contourf(x, y, H, cmap=cmap) 
    plt.colorbar() 
    plt.subplot(2,1,2) 
    plt.contourf(x, y, H, cmap=cmap_rolled) 
    plt.colorbar() 

    plt.show() 

, который приводит к следующему выходу,

enter image description here

Смежные вопросы