频谱图 - 美白特定区域

时间:2014-02-24 22:28:35

标签: python matplotlib

我正在用C ++生成一个频谱图,并使用matplotlib绘制/显示它。

这很好,但是,我正在分割光谱图的一部分,并希望确定关键的兴趣点。该公式与此类似:

if(block >= threshold) then
  spectrogram = block
else:
  spectrogram = "0"

实质上,如果频谱图内的块高于阈值,则在特定位置捕获该块的数据。但是,如果不是,那么我们只是让块包含“0”。问题是当我绘制它时,它在值为“0”的区域中不显示“白色”:

import numpy as np 
import matplotlib.pylab as pl;

data = np.loadtxt('spec.txt')

hm = pl.imshow(10*np.log10(data.T),interpolation='nearest',origin='lower',aspect='auto')
pl.show()

结果如下:

enter image description here

有没有办法设置那些不感兴趣的区域为“白色”,只显示感兴趣的区域?

1 个答案:

答案 0 :(得分:2)

尝试屏蔽您想要白色的区域

data = np.loadtxt("spec.txt")
data = np.ma.masked_where(data == 0, data)
pl.imshow(data, interpolation='nearest', ...)

编辑:

以下是一个例子:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.random_integers(-1, 1, (10, 10))
masked_data = np.ma.masked_where(data == 0, data)

plt.imshow(data, interpolation="nearest")
plt.show()

enter image description here

plt.imshow(masked_data, interpolation="nearest")
plt.show()

enter image description here

第二次编辑:

要更改配色方案,请使用色彩映射

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

data = np.random.rand(10, 10)

cmap = matplotlib.cm.binary
plt.imshow(data, interpolation="nearest", cmap=cmap)
plt.show()

enter image description here

查看here以获取许多色卡的列表。