如何在matplotlib中获得颜色栏,该颜色栏具有从值到颜色的非均匀映射?

如何在matplotlib中获得颜色栏,该颜色栏具有从值到颜色的非均匀映射?,matplotlib,Matplotlib,我想得到一个颜色条,其中0到12000的范围使用np.interp(x[01100100010000120000],[0,0,0.5,1,1])进行映射 我们的想法是将0到100之间的波段映射到相同的颜色,然后将10到1000的范围从最低颜色到中间颜色进行均匀映射,然后从中间颜色到最高颜色进行1000到10000的均匀映射 我想要这个映射,因为我使用的是发散的colormapRdYlGn\u r,临界值是1000,10000和100以上的值是一种异常值 因此,我尝试将colorbase与我自己的

我想得到一个颜色条,其中0到12000的范围使用
np.interp(x[01100100010000120000],[0,0,0.5,1,1])
进行映射

我们的想法是将0到100之间的波段映射到相同的颜色,然后将10到1000的范围从最低颜色到中间颜色进行均匀映射,然后从中间颜色到最高颜色进行1000到10000的均匀映射

我想要这个映射,因为我使用的是发散的colormap
RdYlGn\u r
,临界值是1000,10000和100以上的值是一种异常值

因此,我尝试将
colorbase
与我自己的
Normalizer
子类一起使用,因为
LogNorm
Normalizer
SymLogNorm
BoundaryNorm
PowerNorm
似乎不适合此任务

但绘图为空白(无错误)


并不是说我真的不想要由离散颜色组成的色条,否则
BoundaryNorm
就可以了。我需要一个离散颜色的起始区域,然后是渐变,最后是一个离散的色带

我不知道这是否是
ColorbarBase
中的一个bug,但似乎有一个平坦的起始区域是行不通的

因此,将范围0到100映射到颜色0到0将不起作用,但将范围0到100映射到颜色0到0.0001将起作用

因此,通过将OP中的
np.interp
替换为

resdat = np.interp(resdat, [0,100, 1000, 10000, 120000], [0.00, 0.00001, 0.5, 1,1])
你得到


请注意,在中间或最后有一个平坦的区域是很好的。 @Yuca的可能副本,使用BoundaryNorm,因此它只能用于将整数映射到颜色,而不能将实数映射到颜色。你也不会得到一个有边界范数的梯度。在我的例子中,我想要带(相同颜色)和渐变
resdat = np.interp(resdat, [0,100, 1000, 10000, 120000], [0.00, 0.00001, 0.5, 1,1])