matplotlib 修改viridis色彩Map表(替换某些颜色)

ha5z0ras  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(213)

我到处找了找,找到了一些接近工作的东西,但没有一个完全适合我的需要。
基本上,我真的很喜欢viridis色图作为起点。不过,我想把Map最低端的紫色换成白色。
我尝试使用set_under(),但它不适合我的需要。我只需要把紫色换成白色。
例如,我尝试了以下操作(从这里Matplotlib discrete colorbar)-

cmap = plt.get_cmap('jet')
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1.0,1.0,1.0,1.0)
cmap = cmap.from_list('Custom cmap', cmaplist, cmap.N)

它工作得很好,并且完全符合我对'jet'的需要,但是当我用'viridis'替换'jet'时,我得到以下错误

AttributeError: 'ListedColormap' object has no attribute 'from_list'

我怎么能绕过这一点,简单地做我想做的事?

hsvhsicv

hsvhsicv1#

from_list()方法是LinearSegmentedColormap类的静态方法。在类的示例上调用它可能没有太大意义,就像在jet map的情况下那样(尽管它当然可以工作)。
现在,'viridis'被实现为ListedColormap而不是LinearSegmentedColormap,这意味着它没有这个方法。
无论如何,从类本身调用静态方法更有意义。

import matplotlib.colors

cmap = plt.cm.viridis
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplist[0] = (1.0,1.0,1.0,1.0)
cmap = matplotlib.colors.LinearSegmentedColormap.from_list('mcm',cmaplist, cmap.N)

通过这种方式,它将适用于任何颜色Map表,而不仅仅是那些被分割的颜色Map表。

相关问题