27

違いを簡単に確認できるように、同じ imshow プロットで 2 つの異なるデータ セットを比較したいと思います。私の最初の本能は、カラーマップの色を透明にすることです(特に低い値)が、これを機能させることができませんでした:

from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np

# create dummy data
zvals =  np.random.rand(100,100)*10-5
zvals2 = np.random.rand(100,100)*10-5

# generate the transparent colors
color1 = colorConverter.to_rgba('white',alpha=0.0)
color2 = colorConverter.to_rgba('black',alpha=0.8)

# make the colormaps
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256)

img2 = plt.imshow(zvals,interpolation='nearest',cmap=cmap1,origin='lower')
img3 = plt.imshow(zvals2,interpolation='nearest',cmap=cmap2,origin='lower')

plt.show()

エラーはありませんが、2 番目のプロットの白と黒には透明度がありません。また、通常の plt.plot の状況で colorConverter メソッドを使用して色を設定しようとしたところ、正しい色が表示されましたが、色も透明になりませんでした。

imshow プロットをオーバーレイ/比較する方法に関する追加のアドバイスをいただければ幸いです。

4

3 に答える 3

36

alphaコマンドで引数を設定できますimshow

あなたの例では、img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower', alpha=0.6)

編集:

明確にしていただきありがとうございます。できることの説明は次のとおりです。

  • まず、matplotlib カラーマップオブジェクトを選択します (この場合、白と黒の場合、「バイナリ」カラーマップを使用できます)。または、必要なカラーマップがまだ存在しない場合は、独自のカラーマップを作成します。
  • 次に、このカラーマップ オブジェクトを初期化します。これにより、rgba 値を保持する「_lut」という配列が内部的に作成されます。
  • 次に、達成したい内容に応じてアルファ値を入力できます (この例では、0 から 0.8 までの配列を作成します)。
  • その後、このカラーマップを使用できます

以下は、コードを使用した例です。

from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

# create dummy data
zvals = np.ones((100,100))# np.random.rand(100,100)*10-5
zvals2 = np.random.rand(100,100)*10-5

# generate the colors for your colormap
color1 = colorConverter.to_rgba('white')
color2 = colorConverter.to_rgba('black')

# make the colormaps
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256)

cmap2._init() # create the _lut array, with rgba values

# create your alpha array and fill the colormap with them.
# here it is progressive, but you can create whathever you want
alphas = np.linspace(0, 0.8, cmap2.N+3)
cmap2._lut[:,-1] = alphas

img2 = plt.imshow(zvals, interpolation='nearest', cmap=cmap1, origin='lower')
img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower')

plt.show()

画像

于 2012-04-12T16:23:50.260 に答える