pylab中的变量alpha混合

Hoo*_*ked 7 python alphablending matplotlib

如何在pylab中控制2D图像的透明度?我想给出两组值(X,Y,Z,T),其中X,Y是位置数组,Z是颜色值,T是函数的透明度,imshow但似乎函数只将alpha作为标量.作为一个具体的例子,考虑下面的代码试图显示两个高斯.值越接近零,我就越喜欢这个情节.

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()
Run Code Online (Sandbox Code Playgroud)

注意:我不是在寻找Z1 + Z2的图(这将是微不足道的),而是用于指定图像中的alpha混合的一般方法.

Jus*_*eel 8

你可以做的一件事是修改你放入imshow的东西.第一个变量可以是您使用的灰度值,也可以是RGB或RGBA值.如果是RGB/RGBA值,则忽略cmap.所以,例如,

imshow(Z1, cmap=cm.hsv, alpha=.6, extent=extent)
Run Code Online (Sandbox Code Playgroud)

将生成相同的图像

imshow(cm.hsv(Z1), alpha=.6, extent=extent)
Run Code Online (Sandbox Code Playgroud)

因为cm.hsv()只返回RGBA值.如果你看一下它返回的值,它们都有1.0作为A值(透明度).因此,实现可变透明度的一种方法是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

你可能会发现这样做更优雅的方式,但希望你能得到这个想法.