提问者:小点点

使图像空白透明,覆盖到imshow()


我用imshow()显示了一个空间数据图。

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

我认为我需要将每个背景(白色)像素的字母设置为透明(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...?


共2个答案

匿名用户

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

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)

或者,您可以手动imshowNxMx4np。数组的RBGA值,这样您就不必弄脏颜色贴图

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

imshow(im2)

匿名用户

简单的方法是简单地将图像用作背景,而不是覆盖。除此之外,您还需要使用PIL或Python图像魔术绑定将所选颜色转换为透明。

别忘了,你可能还需要调整你的情节或图像的大小,以便它们在大小上匹配。

如果您按照本教程中的图像进行操作,然后在图像上绘制数据,您应该会得到所需的内容,请注意,本教程使用PIL,因此您也需要安装PIL。