カラーマップを使用して、matplotlib で塗りつぶされた等高線図を作成しようとしています。指定した値の色を変えたい。
例えば、
levs = [-3,-1,1,3]
plt.contourf(x,y,z,levs,cmap=cm.jet,extend='both')
-1 と 1 の間の色を白にして、他の色のデフォルトのカラーマップを維持することを願っています。
私の悪い英語でごめんなさい。どんな助けでも大歓迎です。
カラーマップを使用して、matplotlib で塗りつぶされた等高線図を作成しようとしています。指定した値の色を変えたい。
例えば、
levs = [-3,-1,1,3]
plt.contourf(x,y,z,levs,cmap=cm.jet,extend='both')
-1 と 1 の間の色を白にして、他の色のデフォルトのカラーマップを維持することを願っています。
私の悪い英語でごめんなさい。どんな助けでも大歓迎です。
同じ等高線図を重ねてプロットしますが、レベルが -1 から 1 の間で、色が白になります。
例えば:
from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np
x, y = np.mgrid[-100:100,-100:100]
x /= 10.
y /= 10.
r = np.sqrt(x*x+y*y)
z = 10*np.sin(r)/(r+0.01)
levels = [-4, -3, -2, -1, 1, 2, 3, 4]
plt.contourf(x, y, z, levels=levels, extend='both', cmap=cm.jet)
levels = [-1, 1]
plt.contourf(x, y, z, levels=levels, colors='w')
plt.savefig('contours.png')
アップデート
さらに制御したい場合は、colors
キーワードcontourf
を matplotlib 色のタプルに設定し、レベルと同じ数の要素を使用します (マイナス 1: 色はレベル境界間の間隔に対応します)。次に、別の等高線をオーバープロットする必要はなく、カラーバーも正しいです:
# same as before
levels = [-4, -3, -2, -1, 1, 2, 3, 4]
plt.contourf(x, y, z, levels=levels, extend='both', colors=('#ff0000', '#ff9900', '#999900', 'w', '#009999', '#0099ff', '#0000ff'))
plt.savefig('contours.png')
独自のカラーマップを定義する方が良いかもしれませんが、カラーマップを等高線レベルと正確に一致させる必要があるという問題に遭遇する可能性があります。これが、便利なcolors
キーワードが存在する理由です。