web-dev-qa-db-ja.com

Python matplotlibは、カラーバーの範囲を超える値のデフォルトの色を変更します

Pyplotでcontourfを使用する場合など、グリッドを色で塗りつぶすとき、カラーバーの指定された範囲を超えるデータを塗りつぶすためにpyplotが使用する色を変更する方法を見つける必要があります。データの最大値/最小値に合わせて自動的に範囲を変更しない静的カラーバーが欲しいので、境界を超える極端な値が時々発生することは避けられず、そのような値に対して色を指定する必要があります。

カラーバーの境界を超える値のデフォルトの色は白です。これは、カラーマップの最終色が白でない場合、周囲のデータとはっきりと干渉する可能性があります。画像の例を以下に示します-値がカラーバーの負の範囲を超えたときに白い塗りつぶしに注意してください:

enter image description here

RcParamsを使用して超過した場合に、各境界で使用する色を指定する方法はあると思いますが、これに関する情報はどこにもありませんでした。

任意の助けいただければ幸いです。

24
Levi Cowan

範囲外の色は、カラーマップの_set_over_および_set_under_メソッドを使用して設定できます。 ドキュメント を参照してください。カラーマップを作成するときに、これらの値を指定する必要があります。ただし、これをデフォルトに設定するためのmatplotlibrc設定はありません。また、matplotlibメーリングリストで質問することもできます。

編集:何が起こっているのかわかります。説明する白い領域は、色の範囲の制限を超えていません。それは単に座標軸の空白の背景です。特定のレベルのみをプロットするため、その範囲外のレベルはまったくプロットされず、それらの領域は空白のままになります。あなたが望むものを得るために、これをしてください:

_cs = pyplot.contourf(x,y,z,levels=np.arange(50, 220, 20), cmap=pyplot.cm.jet, extend="both")
cs.cmap.set_under('k')
cs.set_clim(50, 210)
cb = pyplot.colorbar(cs)
_

「拡張」引数が重要です。これは、contourfにすべての等高線をプロットするように指示しますが、指定された範囲の外側はすべて「大きすぎる」および「小さすぎる」カテゴリに縮小します。 _cs.set_clim_呼び出しは、これをデバッグしているときに、contourfで発見した奇妙な点を回避するために必要です。何らかの理由でextendを使用すると、データ制限が操作されるため、それらを元の状態にリセットする必要があります。

また、スタイルの問題として、Colormap.set_under(cmap,color='k')のようなことをするべきではありません。これはクラスメソッドを呼び出し、インスタンスを明示的に渡すことです。これは奇妙な方法です。 cmap.set_under(color="k")を実行するだけです。

29
BrenBarn