imshow:标签作为图像索引的任意函数

时间:2012-09-28 19:09:45

标签: matplotlib axis-labels

imshow根据列索引(x轴)和行索引(y轴)绘制矩阵。我希望轴标签不是索引,而是索引的任意函数。

e.g。音高检测

imshow(A, aspect='auto')其中A.shape == (88200,8)

在x轴上的

显示大约[11000, 22000, ..., 88000]处的几个刻度 在y轴上,显示频率仓[0,1,2,3,4,5,6,7]

我想要的是:

x轴标记从样品标准化为秒。对于44.1kHz采样率的2秒音频,我想要[1,2]处的两个音调。

y轴标记是作为音符的音高。我希望标记在音高['c', 'd', 'e', 'f', 'g', 'a', 'b']的注释中。

理想地:

imshow(A, ylabel=lambda i: freqs[i], xlabel=lambda j: j/44100)

1 个答案:

答案 0 :(得分:1)

您可以结合使用LocatorFormatter s (doc)来执行此操作。

ax = gca()
ax.imshow(rand(500,500))

ax.get_xaxis().set_major_formatter(FuncFormatter(lambda x,p :"%.2f"%(x/44100)))
ax.get_yaxis().set_major_locator(LinearLocator(7))
ax.get_yaxis().set_major_formatter(FixedFormatter(['c', 'd', 'e', 'f', 'g', 'a', 'b']))
draw()