6

私は、まともな観測値、無関係な観測値(マスクアウトしたい)、および観測値がない領域(マスクアウトしたい)を含む配列を持っています。この配列を(pylab.imshowを使用して)2つの別々のマスクを使用して画像として表示したいと思います。ここで、各マスクは異なる色で表示されます。

特定の色の単一のマスク(ここ)のコードを見つけましたが、2つの異なるマスクのコードは見つかりませんでした:

masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('w',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

可能であれば、ひどく歪んだカラーマップを使用する必要はありませんが、それはオプションです。

4

4 に答える 4

4

条件によっては、配列内の値を固定値に置き換えるだけの場合もあります。たとえば、1より大きく-1より小さい要素をマスクする場合です。

val1, val2 = 0.5, 1
a[a<-1]= val1
a[a>1] = val2
ax.imshow(a, interpolation='nearest')

val1そしてval2あなたが望む色を得るために修正することができます。

色を明示的に設定することもできますが、さらに作業が必要です。

import matplotlib.pyplot as plt
from matplotlib import colors, cm

a = np.random.randn(10,10)

norm = colors.normalize()
cmap = cm.hsv
a_colors = cmap(norm(a))

col1 = colors.colorConverter.to_rgba('w')
col2 = colors.colorConverter.to_rgba('k')

a_colors[a<-0.1,:] = col1
a_colors[a>0.1,:] = col2
plt.imshow(a_colors, interpolation='nearest')
plt.show()
于 2012-11-14T17:54:44.820 に答える
3

私にとって最も簡単な方法は、imshowを使用してマスクを直接プロットし、さまざまなカラーマップを渡すことです。カラーマップの最大値と最小値は、True値とFalse値に使用されます。

mask1=np.isnan(a)
mask2=np.logical_not(mask1)
plt.imshow(mask1,cmap='gray')
plt.imshow(mask2,cmap='rainbow')

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

ただし、この(および提案されている他のアプローチ)プロットは、以前のプロットをオーバープロットするFalse値もプロットします。False値のプロットを避けたい場合は、配列をfloatに変換した後、それらをnp.nanに置き換えることで実行できます(np.nanはfloat型であり、ブールマスクに含めることはできません)。nan値はプロットされません:

mmm=mask.astype(np.float)
mmm[np.where(mmm==0)]=np.nan
#the substitution can be done also in one line with:
#mmm=np.where(mask,mask.astype(np.float),np.nan)
plt.imshow(mmm,cmap='rainbow',vmin=0,vmax=1)) #will use only the top color: red. vmin and vmax are needed if there are only one value (1.0=True) in the array.
plt.colorbar()
#repeat for other masks...

ここに画像の説明を入力してください そして、私はあまり話題から外れないことを願っていますが、同じ手法を使用して、plotingコマンドを次のように置き換えることにより、データのさまざまな部分をさまざまなカラーマップでプロットできます。

plt.imshow(mmm*data,cmap='rainbow')

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

于 2015-12-04T02:23:35.197 に答える
2

次の画像に示すように、一部のピクセルを赤に、他のピクセルを緑に着色するために、以下のコードを使用しました。(詳細については、コードコメントを参照してください。)

matplotlibマトリックスグラフで使用されている2つのマスクの例

import numpy as np              #Used for holding and manipulating data
import numpy.random             #Used to generate random data
import matplotlib as mpl        #Used for controlling color
import matplotlib.colors        #Used for controlling color as well
import matplotlib.pyplot as plt #Use for plotting

#Generate random data
a = np.random.random(size=(10,10))

#This 30% of the data will be red
am1 = a<0.3                                 #Find data to colour special
am1 = np.ma.masked_where(am1 == False, am1) #Mask the data we are not colouring

#This 10% of the data will be green
am2 = np.logical_and(a>=0.3,a<0.4)          #Find data to colour special
am2 = np.ma.masked_where(am2 == False, am2) #Mask the data we are not colouring

#Colourmaps for each special colour to place. The left-hand colour (black) is
#not used because all black pixels are masked. The right-hand colour (red or
#green) is used because it represents the highest z-value of the mask matrices
cm1 = mpl.colors.ListedColormap(['black','red'])
cm2 = mpl.colors.ListedColormap(['black','green'])

fig = plt.figure()                          #Make a new figure
ax = fig.add_subplot(111)                   #Add subplot to that figure, get ax

#Plot the original data. We'll overlay the specially-coloured data
ax.imshow(a,   aspect='auto', cmap='Greys', vmin=0, vmax=1)

#Plot the first mask. Values we wanted to colour (`a<0.3`) are masked, so they
#do not show up. The values that do show up are coloured using the `cm1` colour
#map. Since the range is constrained to `vmin=0, vmax=1` and a value of
#`cm2==True` corresponds to a 1, the top value of `cm1` is applied to all such
#pixels, thereby colouring them red.
ax.imshow(am1, aspect='auto', cmap=cm1, vmin=0, vmax=1);
ax.imshow(am2, aspect='auto', cmap=cm2, vmin=0, vmax=1);
plt.show()
于 2018-06-25T07:30:10.383 に答える
0

配列内の値はわかりませんが、マスクされた領域を変換して、X値がRGB(A)値(のタプル)になるようにすることができます。この場合、少なくともドキュメント(R,G,B,A)によれば、cmapは無視されます。 。

•cmap:[なし| カラーマップ]

matplotlib.colors.Colormapインスタンス。例:cm.jet。Noneの場合、デフォルトでrcimage.cmap値になります。XにRGB(A)情報がある場合、cmapは無視されます

于 2012-11-14T17:47:49.147 に答える