python - 在 matplotlib 中叠加 imshow 图

标签 python numpy matplotlib

我想在同一个 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()

没有错误,但第二张图的白色和黑色不显示任何透明度。我还尝试了 colorConverter 方法在正常 plt.plot 情况下设置颜色,尽管显示了正确的颜色,但颜色也没有变得透明。

任何关于如何覆盖/比较 imshow 图的额外建议将不胜感激

最佳答案

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

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

编辑:

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

  • 首先,选择matplotlib colormap对象(在您的情况下,对于白色和黑色,您可以采用“二进制”颜色图)。如果您想要的颜色图尚不存在,或者像您一样创建您自己的颜色图。
  • 然后初始化这个颜色图对象:这将导致它在内部创建一个名为“_lut”的数组,其中包含 rgba 值。
  • 然后,您可以根据您想要达到的效果填充 alpha 值(在您的示例中,创建一个从 0 到 0.8 的数组)
  • 然后您可以使用此颜色图

以下是使用您的代码的示例:

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()

image

关于python - 在 matplotlib 中叠加 imshow 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127284/

相关文章:

python Constraints——限制数量

python - django 完整性错误,我知道为什么,但不知道如何解决

python - 尽管安装了所需的库(在 ubuntu 上使用 python3),但 Pyautogui 函数 LocateOnScreen 仍然出错。请帮帮我

python - 带有趋势线的散点图

python - 将 np 数组添加到现有的 pandas 数据框

C:二维 int 数组行的 free() 使程序停止

python - 你如何将一个 Numpy 数组 (mxn) 展开成一个向量

python - 使用 Python 将输出总和四舍五入到最接近的偶数

python - 如何使 matplotlib 标题可搜索?

python - 从等高线图中完全删除轴