這是一直困擾我一段時間的東西。無論何時我使用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