我有一个用imshow()显示的空间数据图。
我需要能够覆盖产生数据的晶格。我有一个png 加载为黑白图像的晶格文件。我想要的图像部分 overlay是黑色线条,它们是格子,而不是看到线条之间的白色背景。
我想我需要将每个背景(白色)像素的alpha设置为透明(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...?
答案 0 :(得分: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
一个RBGA值的NxMx4 np.array
,这样您就不必使用颜色贴图
im2 = np.zeros(lattice.shape + (4,))
im2[:, :, 3] = lattice # assuming lattice is already a bool array
imshow(im2)
答案 1 :(得分:0)
简单的方法是简单地将图像用作背景而不是叠加层。除此之外,您需要使用PIL或Python Image Magic绑定将所选颜色转换为透明。
不要忘记您可能还需要调整绘图或图像的大小以使它们的大小匹配。
如果您按照教程here添加图像,然后在其上绘制数据,那么您应该得到所需内容,请注意本教程使用PIL,因此您也需要安装PIL。