我已经四处寻找并找到了接近工作的东西但却没有完全符合我的需要。
基本上,我非常喜欢将viridis色图作为起点。但是,我想用白色替换地图最下端的紫色。
我尝试使用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'我收到以下错误
AttributeError: 'ListedColormap' object has no attribute 'from_list'
我如何解决这个问题并干脆做我想做的事?
非常感谢任何协助。
谢谢!
答案 0 :(得分:2)
from_list()
方法是LinearSegmentedColormap
类的静态方法。在类的实例上调用它可能没有多大意义,就像在喷射映射的情况下那样(尽管它确实起作用)。
现在,' 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)
通过这种方式,它可以用于任何色彩映射,而不仅仅是分段色彩映射。