首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在matplotlib中叠加imshow图

在matplotlib中叠加imshow图
EN

Stack Overflow用户
提问于 2012-04-12 23:56:41
回答 3查看 62K关注 0票数 27

我想比较同一imshow图上的两组不同的数据,以便更容易地看到差异。我的第一反应是让色彩映射表中的颜色变得透明(特别是较低的值),但我一直未能做到这一点:

代码语言:javascript
运行
复制
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图的其他建议都将不胜感激

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-13 00:23:50

您可以在imshow命令中设置alpha参数。

在您的示例中,img3 = plt.imshow(zvals2, interpolation='nearest', cmap=cmap2, origin='lower', alpha=0.6)

编辑:

谢谢你的澄清。以下是您可以执行的操作的说明:

  • 首先,选择一个matplotlib colormap对象(在您的例子中,对于白色和黑色,您可以采用'binary‘色彩映射)。或者,如果所需的色彩映射表尚不存在,则按照您所做的那样创建自己的色彩映射表。然后,
  • 初始化此色彩映射表对象:这将导致它在内部创建一个名为"_lut“的数组,该数组保存RGBA值。
  • 然后,您可以根据需要填充Alpha值(在您的示例中,创建一个从0到0.8的数组)
  • 然后您可以使用此色彩映射表

下面是一个使用您的代码的示例:

代码语言:javascript
运行
复制
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()

票数 36
EN

Stack Overflow用户

发布于 2021-08-23 03:42:06

如果你定制cmap,它可以很容易地解决过射线的问题

代码语言:javascript
运行
复制
cmap1 = matplotlib.colors.ListedColormap(['none', 'green'])
cmap2 = matplotlib.colors.ListedColormap(['none', 'red'])


img2 = plt.imshow(~~~ cmap=cmap1 ~~~)
img3 = plt.imshow(~~~ cmap=cmap2 ~~~)
票数 1
EN

Stack Overflow用户

发布于 2020-09-22 03:38:27

这里链接的答案,涉及屏蔽您的输入数组,似乎更适合我:Setting Transparency Based on Pixel Values in Matplotlib

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10127284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档