2012-02-09 22 views
3

マスクされた配列でpcolorを使用しようとしています。マスクされた要素 を特別な色で表示したいと思います。私はいくつかのコードを書かれているが、それはない は動作するようです:cmap.set_bad()がpcolor()で効果を示さない

import matplotlib as mpl 
import matplotlib.pyplot as plt 

from numpy import linspace 
from numpy.random import randn 
from numpy.ma import masked_invalid 

D = randn(12*72).reshape((12,72)) 
D[4,:] = nan 
D[6,6] = nan 

D = masked_invalid(D) 

cmap = mpl.cm.bwr 
c map.set_bad('k', 1.) 

xbin = linspace(0, 12, 13) 
ybin = linspace(-90, 90, 73) 

fig = plt.figure() 
spl = fig.add_subplot(111) 
pl = spl.pcolor(xbin, ybin, D.T, cmap=cmap, edgecolors='none', 
       vmin=-5, vmax=5) 
+0

あなたはこのコードを実行するときに何が起こりますか?結果はどういったものですか? – Yann

答えて

7

pcolormeshためのドキュメントは言う:

仮面アレイサポートはCMAPと規範を経て実現し です。対照的にのの場合、pcolor()は単に にマスクされた色または頂点で四角形を描画しません。

ので、代わりにpcolormeshを使用します。

import matplotlib.pyplot as plt 
import numpy as np 

D = np.random.randn(12*72).reshape((12, 72)) 
D[4, :] = np.nan 
D[6, 6] = np.nan 

D = np.ma.masked_invalid(D) 

cmap = plt.get_cmap('bwr') 
cmap.set_bad(color = 'k', alpha = 1.) 

xbin = np.linspace(0, 12, 13) 
ybin = np.linspace(-90, 90, 73) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
pl = ax.pcolormesh(xbin, ybin, D.T, cmap = cmap, edgecolors = 'None', 
       vmin = -5, vmax = 5) 
plt.show() 

enter image description here

+0

ありがとう、それは動作します。しかし、なぜそれがpcolorで動作しないのですか?両者の違いは何ですか? –

+2

文書からスニペットを追加しました。このスニペットは、 'pcolor'がマスキングされた色で 四辺形を描画しないことを警告しています。それ以外は、 のドキュメントに明記されている違いがあります(例えば、 'pcolor'は' PolyCollection' kwargsを受け取りますが、 'pcolormesh'は' QuadMesh' kwargsを受け入れます)。私は をいつ利用するかについて意見を作成していません。 – unutbu

関連する問題