Как каждый управляет прозрачностью по 2D изображению в pylab? Я хотел бы дать два множества значений (X,Y,Z,T)
где X,Y
массивы положений, Z
значение цвета, и T
прозрачность к функции как imshow
но кажется, что функция только берет альфу в качестве скаляра. Как конкретный пример, считайте код ниже этого попытками отобразить два Gaussians. Чем ближе значение должно обнулить, тем более прозрачный я хотел бы график быть.
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 (который был бы тривиален), но для общего способа указать альфу, смешивающуюся через изображение.
Вы можете изменить то, что вы помещаете в 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. Если вы посмотрите на значения, которые он возвращает, все они имеют 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)
Вы можете найти более элегантный способ сделать это, но, надеюсь, вы уловили идею.