26

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

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

ここに画像の説明を入力してください

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

どんな助けでもいただければ幸いです。

4

1 に答える 1

35

範囲外の色は、カラーマップの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)

「extend」引数が重要です。これは、contourfに先に進んですべての等高線をプロットするように指示しますが、指定された範囲外のすべてを「大きすぎる」と「小さすぎる」のカテゴリに分類します。cs.set_climこれをデバッグしているときにcontourfで発見した奇妙な問題を回避するには、この呼び出しが必要です。何らかの理由でを使用するextendと、データ制限が操作されるため、データ制限を希望どおりにリセットする必要があります。

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

于 2012-07-08T19:59:37.470 に答える