Переменная альфа, гармонирующая pylab

Как каждый управляет прозрачностью по 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 (который был бы тривиален), но для общего способа указать альфу, смешивающуюся через изображение.

7
задан Hooked 22 March 2010 в 20:52
поделиться

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. Если вы посмотрите на значения, которые он возвращает, все они имеют 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)

Вы можете найти более элегантный способ сделать это, но, надеюсь, вы уловили идею.

8
ответ дан 7 December 2019 в 05:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: