7

pylabで2D画像の透明度をどのように制御しますか? は位置の配列、は色の値、は関数の透過性である(X,Y,Z,T)2つの値のセットを指定したいと思いますが、関数はアルファのみをスカラーとして受け取るようです。具体的な例として、2 つのガウス分布を表示しようとする以下のコードを考えてみましょう。値がゼロに近づくほど、プロットをより透明にしたいと思います。X,YZTimshow

from pylab import *

side = linspace(-1,1,100)
X,Y  = meshgrid(side,side)

extent = (-1,1,-1,1)

Z1  = exp(-((X+.5)**2+Y**2))
Z2  = exp(-((X-.5)**2+(Y+.2)**2))

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent)
imshow(Z2, cmap=cm.hsv, alpha=.6, extent=extent)
show()

注:Z1 + Z2のプロット(それは些細なことです)を探しているのではなく、画像全体のアルファブレンディングを指定する一般的な方法を探しています。

4

1 に答える 1

8

できることの 1 つは、imshow に入力した内容を変更することです。最初の変数は、使用したグレースケール値にするか、RGB または RGBA 値にすることができます。RGB/RGBA 値の場合、cmap は無視されます。たとえば、

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent)

と同じ画像を生成します

imshow(cm.hsv(Z1), alpha=.6, extent=extent)

cm.hsv()RGBA値を返すだけだからです。返される値を見ると、A 値 (透明度) としてすべて 1.0 が含まれています。したがって、可変透明度を作成する 1 つの方法は次のようになります。

def mycmap(x):
    tmp = cm.hsv(x)
    for i in xrange(tmp.shape[0]):
        for j in xrange(tmp.shape[0]):
            tmp[i,j][3] = somefunction of x[i,j] that generates the transparency
    return tmp

imshow(mycmap(Z1), extent=extent)
imshow(mycmap(Z2), extent=extent)

これを行うためのもう少しエレガントな方法が見つかるかもしれませんが、うまくいけばアイデアが得られます。

于 2010-03-22T21:27:34.587 に答える