Matplotlib 循环移位颜色映射

Matplotlib 循环移位颜色映射,matplotlib,Matplotlib,是否有一种循环移位的方法,例如hsv颜色图,以便改变中心颜色?它在我的身材中占据了相当大的空间,我希望它是一种不同的颜色。由于颜色映射是周期性的,所以这应该是可能的。基于此中使用的非线性颜色映射,但使用线性级别替换为移位 import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LinearSegmentedColormap class roll_cmap(LinearSegmentedCo

是否有一种循环移位的方法,例如hsv颜色图,以便改变中心颜色?它在我的身材中占据了相当大的空间,我希望它是一种不同的颜色。由于颜色映射是周期性的,所以这应该是可能的。

基于此中使用的非线性颜色映射,但使用线性级别替换为移位

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()
导入matplotlib.pyplot作为plt
将numpy作为np导入
从matplotlib.colors导入LinearSegmentedColormap
类滚动cmap(LinearSegmentedColormap):
定义初始值(自身、cmap、班次):
断言0移位<1。
self.cmap=cmap
self.N=cmap.N
self.monochy=self.cmap.monochy
self.x=np.linspace(0.0,1.0255)
self._y=np.roll(np.linspace(0.0,1.0,255),int(255.*shift))
DEF-αCall(自,席,α= 1,**KW):
yi=np.interp(xi,self.\x,self.\y)
返回self.cmap(yi,alpha)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
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.子地块(2,1,1)
轮廓曲线图(x,y,H,cmap=cmap)
plt.colorbar()
plt.子地块(2,1,2)
轮廓曲线(x,y,H,cmap=cmap_)
plt.colorbar()
plt.show()
这将导致以下输出