2

我有一张用 imshow() 显示的空间数据图。

我需要能够覆盖产生数据的晶格。我有一个格子的 png 文件,它作为黑白图像加载。我要覆盖的图像的部分是作为格子的黑线,看不到线之间的白色背景。

我在想我需要将每个背景(白色)像素的 alphas 设置为透明(0 ?)。

我对此很陌生,以至于我真的不知道如何问这个问题。

编辑:

import matplotlib.pyplot as plt
import numpy as np

lattice = plt.imread('path')
im = plt.imshow(data[0,:,:],vmin=v_min,vmax=v_max,extent=(0,32,0,32),interpolation='nearest',cmap='jet')

im2 = plt.imshow(lattice,extent=(0,32,0,32),cmap='gray')

#thinking of making a mask for the white background
mask = np.ma.masked_where( lattice < 1,lattice ) #confusion here b/c even tho theimage is gray scale in8, 0-255, the numpy array lattice 0-1.0 floats...?

在此处输入图像描述

4

2 回答 2

7

没有你的数据,我无法测试这个,但是像

import matplotlib.pyplot as plt
import numpy as np
import copy

my_cmap = copy.copy(plt.cm.get_cmap('gray')) # get a copy of the gray color map
my_cmap.set_bad(alpha=0) # set how the colormap handles 'bad' values
lattice = plt.imread('path')
im = plt.imshow(data[0,:,:],vmin=v_min,vmax=v_max,extent=(0,32,0,32),interpolation='nearest',cmap='jet')

lattice[lattice< thresh] = np.nan # insert 'bad' values into your lattice (the white)

im2 = plt.imshow(lattice,extent=(0,32,0,32),cmap=my_cmap)

或者,您可以imshow提供 NxMx4np.array的 RBGA 值,这样您就不必弄乱颜色图

im2 = np.zeros(lattice.shape + (4,))
im2[:, :, 3] = lattice # assuming lattice is already a bool array

imshow(im2)
于 2013-08-11T00:36:15.140 回答
0

简单的方法是简单地将图像用作背景而不是叠加层。除此之外,您将需要使用PILPython Image Magic绑定将所选颜色转换为透明。

不要忘记,您可能还需要调整绘图或图像的大小,以使它们的大小匹配。

更新:

如果您按照此处的教程使用图像,然后在其上绘制数据,您应该会得到您需要的东西,请注意本教程使用 PIL,因此您也需要安装它。

于 2013-08-10T07:58:28.847 回答