这是一直困扰我一段时间的东西。无论何时我使用cmap.set_under()
或cmap.set_over()
方法更改超出界限值的颜色,它们似乎都会将这些更改应用于使用该颜色映射的所有实例。以下是我所指的一个例子。使用'set_under'或'set_over'后重置默认的matplotlib色彩值
import matplotlib.pyplot as plt
import numpy as np
rand_data = np.random.randint(50, size=(20,20))
plt.figure()
plt.subplot(211)
cmap1 = plt.cm.rainbow
im1 = plt.pcolormesh(rand_data, cmap=cmap1, vmin=10)
im1.cmap.set_under('w')
plt.colorbar(extend='min')
plt.subplot(212)
cmap2 = plt.cm.rainbow
im2 = plt.pcolormesh(rand_data, cmap=cmap2, vmin=10)
im2.cmap.set_under('k')
plt.colorbar(extend='min')
plt.show()
这里我试图创建两个相同值的图。在第一个图中,我希望所有低于10的值都是白色的。在第二个图中,我希望所有低于10的值都是黑色。结果是这样的:
看来,我以前set_under
第二次将其复位set_under为使用彩虹颜色映射所有现有的图解。如果我在第二个情节使用不同的颜色表,我可以设置不同的set_under
颜色:
更为离奇的,如果在一个函数或脚本使用cmap.set_under()
或cmap.set_over()
,此设置不会重置后退出该功能。也就是说,如果我注释掉我明确定义set_under
和颜色重新运行脚本的行,我会得到与以前相同的结果。
所以我有几个问题:
有没有一种方法来设置一个图一个颜色映射出界外值的颜色,而不会影响任何现有地块的颜色表?
如何将界外值重置为原始颜色?
对于第二个问题,我知道我可以做这样的事情手动添加回原来的颜色:
N = cmap.N
cmap.set_under(cmap(1))
cmap.set_over(cmap(N-1))
但是,我觉得应该有一个更简单的方法。
谢谢!我甚至没有考虑制作色彩映射的副本。我想我的印象是使用'im.cmap。set_under()'而不是'cmap.set_under'只会改变'im'中使用的颜色映射的实例。但是,你的解释很有道理。 – nikobam