これはしばらく私を悩ませています。 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()
ここでは、同じ値の2つのプロットを作成しようとしています。最初のプロットでは、10未満のすべての値を白にします。 2番目のプロットでは、10未満のすべての値を黒にします。私がset_under
を使用し二回目は、それが虹のカラーマップを使用するすべての既存のプロットのset_underをリセットすることが表示されます
:結果がこれです。私は2番目のプロットに異なるカラーマップを使用している場合は、私は可能な異なるset_under
色を設定します
さらに奇妙な、関数やスクリプトで使用cmap.set_under()
またはcmap.set_over()
場合、この設定は後にリセットされません。その機能を終了する。つまり、私が明示的にset_under
を定義した行をコメントアウトして、色がスクリプトを再実行すると、前と同じ結果になります。
- は、既存のプロットのカラーマップに影響を与えることなく、単一のプロットのためのカラーマップの範囲外の値の色を設定する方法はあります:
は、だから私は、カップルの質問があります?
アウトオブバウンド値を元の色にリセットするにはどうすればよいですか? 2番目の質問については
N = cmap.N
cmap.set_under(cmap(1))
cmap.set_over(cmap(N-1))
しかし、もっと簡単な方法があるはずような気がします。
ありがとうございます!私はカラーマップのコピーを作ることについても考えなかった。私は 'im.cmap 'を使っている印象を受けていたと思います。set_under() 'と' cmap.set_under'との違いは、 'im'で使われているカラーマップのインスタンスだけを変更します。しかし、あなたの説明は理にかなっています。 – nikobam