2017-05-12 11 views
2

私は、指定された値の下にあるすべての値が白(ゼロを含む)であり、すべての値が黒である(matlotlib contourfプロットを生成しようとしています。私は以下のリンク先の図、両方のナンを取得matplotlib contourfプロットでset_underとset_badの両方を使用している

これを使用して
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 

# Generate some random data for a contour plot 
Z = np.random.rand(10,10) 
Z[0:3,0:3] = np.nan # some bad values for set_bad 
Z[0:3,7:10] = 0 # some zero values for set_under 
x = np.arange(10) 
y = np.arange(10) 
X,Y = np.meshgrid(x, y) 

# Mask the bad data: 
Z_masked = np.ma.array(Z,mask=np.isnan(Z)) 

# Get the colormap and set the under and bad colors 
colMap = cm.gist_rainbow 
colMap.set_bad(color='black') 
colMap.set_under(color='white') 

# Create the contour plot 
plt.figure(figsize=(10, 9)) 
contourPlot = plt.contourf(X,Y,Z_masked,cmap = colMap,vmin = 0.2) 
plt.colorbar(contourPlot) 
plt.show() 

:私は、下/問題のゼロvalues.A簡略化した例があるNaN値が異なる色であることを得るように見えることはできません値(左下)とゼロ値(右下)は白です。なぜナノ値が黒でないのか分かりません。

buggy figure

Generated Figure

+2

ない、これはあなたを助けることができるかどうかわからが、この[例]で、コメントの最後の行を読んでください(https://matplotlib.org/examples/ pylab_examples/contourf_demo.html) –

+0

@ViníciusAguiarああ、それは正しいです! – tacaswell

答えて

0

キーは例がcontourfは、単にデータが無効である何かを描画しないことを指摘している@ViníciusAguiaによって指されています。あなたの例で白黒を反転させたなら、それはうまくいったように見えました!マスクされた領域が全く満たされていないので

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
plt.ion() 

# Generate some random data for a contour plot 
Z = np.random.rand(10,10) 
Z[0:3,0:3] = np.nan # some bad values for set_bad 
Z[0:3,7:10] = 0 # some zero values for set_under 
x = np.arange(10) 
y = np.arange(10) 
X,Y = np.meshgrid(x, y) 

# Mask the bad data: 
Z_masked = np.ma.array(Z,mask=np.isnan(Z)) 

# Get the colormap and set the under and bad colors 
colMap = cm.gist_rainbow 
# this has no effect see last comment block in 
# https://matplotlib.org/examples/pylab_examples/contourf_demo.html 
# colMap.set_bad(color='black') 
colMap.set_under(color='white') 

# Create the contour plot 
fig, ax = plt.subplots() 
contourPlot = ax.contourf(X,Y,Z_masked,cmap = colMap,vmin = 0.2, extend='both') 
fig.colorbar(contourPlot) 
# This is effectively 'bad' for contourf 
ax.set_facecolor('k') 
plt.show() 

enter image description here

+0

tacaswellと@ViníciusAguiaありがとう、これはうまくいきます! – Shawn

1

あなたが望む結果を得るための方法は、あなたが「悪い」のためにしたい色にあなたの座標軸上のFaceColorを設定することですプロットの背景を、「悪い」値である「plt.gca().set_facecolor("black")」に属性を付ける色に設定するだけです。

コンプリート例:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 

# Generate some random data for a contour plot 
Z = np.random.rand(10,10) 
Z[0:3,0:3] = np.nan # some bad values for set_bad 
Z[0:3,7:10] = 0 # some zero values for set_under 
x = np.arange(10) 
y = np.arange(10) 
X,Y = np.meshgrid(x, y) 

# Mask the bad data: 
Z_masked = np.ma.array(Z,mask=np.isnan(Z)) 

# Get the colormap and set the under and bad colors 
colMap = cm.gist_rainbow 
colMap.set_under(color='white') 

# Create the contour plot 
plt.figure(figsize=(10, 9)) 
plt.gca().set_facecolor("black") 
contourPlot = plt.contourf(X,Y,Z_masked,cmap = colMap,vmin = 0.2) 
plt.colorbar(contourPlot) 
plt.show() 

enter image description here

+0

ありがとう@ImportanceOfBeingErnest、これはうまくいきます! – Shawn

関連する問題