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混合的一般方法.
你可以做的一件事是修改你放入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)
你可能会发现这样做更优雅的方式,但希望你能得到这个想法.
| 归档时间: |
|
| 查看次数: |
4736 次 |
| 最近记录: |