Python 使用matplotlib的半透明覆盖将生成灰色而不是颜色
我想用两个灰度图像做一个彩色叠加,每个图像显示一个“信号峰值”。为了只在叠加中显示峰值,而不在背景中显示峰值,我创建了一个带有alpha通道的蓝色贴图,该通道从0渐变到1。使用Python 使用matplotlib的半透明覆盖将生成灰色而不是颜色,python,image,matplotlib,Python,Image,Matplotlib,我想用两个灰度图像做一个彩色叠加,每个图像显示一个“信号峰值”。为了只在叠加中显示峰值,而不在背景中显示峰值,我创建了一个带有alpha通道的蓝色贴图,该通道从0渐变到1。使用imshow(),我希望看到透明的颜色,但我看到峰值周围有一个灰色光晕。我对这个问题研究了很长一段时间,但我就是想不出我需要做些什么来摆脱那个灰色的光环。如能帮助制作所需类型的覆盖物,将不胜感激 下面是一些产生问题的代码: import numpy as np import matplotlib.pyplot as plt
imshow()
,我希望看到透明的颜色,但我看到峰值周围有一个灰色光晕。我对这个问题研究了很长一段时间,但我就是想不出我需要做些什么来摆脱那个灰色的光环。如能帮助制作所需类型的覆盖物,将不胜感激
下面是一些产生问题的代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as cols
n = 41
# make Gaussian signal peaks
x = np.linspace(-1,1,n)
xx, yy = np.meshgrid(x,x)
b = 0.3
d = -0.3 # diagonal displacement
p1 = np.exp(-((xx-d)**2 + (yy-d)**2)/b**2)
p2 = np.exp(-((xx+d)**2 + (yy+d)**2)/b**2)
# make custom colormap
cdict = {'red': ((0.0, 0.0, 0.0),
(1.0, 0.3, 0.3)),
'green': ((0.0, 0.0, 0.0),
(1.0, 0.5, 0.5)),
'blue': ((0.0, 0.0, 0.0),
(1.0, 1.0, 1.0))}
myBu = cols.LinearSegmentedColormap('myBu',cdict,256)
# add ramp alpha channel
myBuT = cols.LinearSegmentedColormap('myBuT',cdict,256)
myBuT._init()
alphas = np.linspace(0, 1, 256+3)
myBuT._lut[:,-1] = alphas
# plot
plt.close('all')
plt.subplot(1,3,1)
plt.imshow(p1, cmap='copper')
plt.subplot(1,3,2)
plt.imshow(p2, cmap=myBu)
plt.subplot(1,3,3)
plt.imshow(p1, cmap='copper')
plt.imshow(p2, cmap=myBuT)
plt.show()
在代码生成的最右侧图像中,您可以看到蓝点周围的光晕
以下是我得到的:
我使用Python2.7.3、matplotlib 1.2.0,并尝试了不同的GUI(qt、wx、gtk),没有任何区别
更新:
转到python 2.7.5和matplotlib 1.3.1解决了这个问题。您的代码对我来说很好,它不会产生任何灰色光晕。请参阅所附图片 我使用WinPython附带的python 2.7.6,在ipython笔记本中使用matplotlib 1.3.1