我想比较同一imshow图上的两组不同的数据,以便更容易地看到差异。我的第一反应是让色彩映射表中的颜色变得透明(特别是较低的值),但我一直未能做到这一点:
from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np
# create dummy data
zvals = np.random.rand(100,100)*10-5
zvals2 = np.random.rand(100,100)*10-5
# generate the transparent colors
color1 = colorConverter.to_rgba('white',alpha=0.0)
color2 = colorConverter.to_rgba('black',alpha=0.8)
# make the colormaps
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256)
img2 = plt.imshow(zvals,interpolation='nearest',cmap=cmap1,origin='lower')
img3 = plt.imshow(zvals2,interpolation='nearest',cmap=cmap2,origin='lower')
plt.show()
没有错误,但第二个绘图的白色和黑色没有显示任何透明度。我还尝试了在正常的plt.plot情况下使用colorConverter方法设置颜色,虽然显示了正确的颜色,但颜色也没有变得透明。
任何关于如何覆盖/比较imshow图的其他建议都将不胜感激
发布于 2012-04-13 00:23:50
您可以在imshow
命令中设置alpha
参数。
在您的示例中,img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower', alpha=0.6)
编辑:
谢谢你的澄清。以下是您可以执行的操作的说明:
下面是一个使用您的代码的示例:
from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
# create dummy data
zvals = np.ones((100,100))# np.random.rand(100,100)*10-5
zvals2 = np.random.rand(100,100)*10-5
# generate the colors for your colormap
color1 = colorConverter.to_rgba('white')
color2 = colorConverter.to_rgba('black')
# make the colormaps
cmap1 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap',['green','blue'],256)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_cmap2',[color1,color2],256)
cmap2._init() # create the _lut array, with rgba values
# create your alpha array and fill the colormap with them.
# here it is progressive, but you can create whathever you want
alphas = np.linspace(0, 0.8, cmap2.N+3)
cmap2._lut[:,-1] = alphas
img2 = plt.imshow(zvals, interpolation='nearest', cmap=cmap1, origin='lower')
img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower')
plt.show()
发布于 2021-08-23 03:42:06
如果你定制cmap,它可以很容易地解决过射线的问题
cmap1 = matplotlib.colors.ListedColormap(['none', 'green'])
cmap2 = matplotlib.colors.ListedColormap(['none', 'red'])
img2 = plt.imshow(~~~ cmap=cmap1 ~~~)
img3 = plt.imshow(~~~ cmap=cmap2 ~~~)
发布于 2020-09-22 03:38:27
这里链接的答案,涉及屏蔽您的输入数组,似乎更适合我:Setting Transparency Based on Pixel Values in Matplotlib
https://stackoverflow.com/questions/10127284
复制相似问题