我正在用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()
结果如下:
有没有办法设置那些不感兴趣的区域为“白色”,只显示感兴趣的区域?
答案 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()
plt.imshow(masked_data, interpolation="nearest")
plt.show()
第二次编辑:
要更改配色方案,请使用色彩映射
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()
查看here以获取许多色卡的列表。