向频谱图添加色条

10
我正在尝试为频谱图添加一个Colorbar。我已经尝试了所有在网上找到的示例和问题线程,但是没有解决这个问题。
请注意,'spl1'(数据拼接1)是来自ObsPy的跟踪。
我的代码如下:
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2]) #[left bottom width height]
ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1)
ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6])

t = np.arange(spl1[0].stats.npts) / spl1[0].stats.sampling_rate
ax1.plot(t, spl1[0].data, 'k')

ax,spec = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2)
ax2.set_ylim(0.1, 15)
fig.colorbar(spec, cax=ax3)

它出现了错误:

Traceback (most recent call last):

  File "<ipython-input-18-61226ccd2d85>", line 14, in <module>
    ax,spec = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2)

TypeError: 'Axes' object is not iterable

目前为止最好的结果:

将上述最后3行替换为:

ax = spectrogram(spl1[0].data,spl1[0].stats.sampling_rate, show=False, axes=ax2)
ax2.set_ylim(0.1, 15)
fig.colorbar(ax,cax=ax3)

生成以下内容:

波形和频谱图

并且会出现关于色条的错误:

axes object has no attribute 'autoscale_None'

我似乎找不到让右侧的色条正常工作的方法。
解决方案?
其中一个解决方案是使用imshow()创建数据的“图像”,但是我从Spectrogram()中没有得到输出,只有“ax”。我看到有些地方尝试使用spectrogram()的“ax,spec”输出,但这会导致TypeError。

我希望有人能帮忙 - 我已经在做这个工作一整天了!


3
您成功绘制了没有颜色条的频谱图吗?您正在使用哪个库中的“spectrogram”函数?请提供该函数所属的库名。 - gsmafra
1
@gsmafra 我已经在上面的帖子中更新了更多信息-我可以正常绘制频谱图。Spectrogram函数来自:obspy.imaging.spectrogram.spectrogram(因为它具有更简单的内置功能),尽管它在底层使用specgram。 - mjp
1
正在进行的讨论在:https://github.com/obspy/obspy/issues/1086,其中有一个成功的色条图。虽然对于我的情况不起作用,但如果那里找到了解决方案,我也会在这里添加解决方案。 - mjp
1个回答

4

我在获得这个链接的帮助下解决了问题。虽然它还没有显示分贝,但主要问题已经得到解决:获取颜色条。

from obspy.imaging.spectrogram import spectrogram
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.75, 0.7, 0.2]) #[left bottom width height]
ax2 = fig.add_axes([0.1, 0.1, 0.7, 0.60], sharex=ax1)
ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6])

#make time vector
t = np.arange(spl1[0].stats.npts) / spl1[0].stats.sampling_rate

#plot waveform (top subfigure)    
ax1.plot(t, spl1[0].data, 'k')

#plot spectrogram (bottom subfigure)
spl2 = spl1[0]
fig = spl2.spectrogram(show=False, axes=ax2)
mappable = ax2.images[0]
plt.colorbar(mappable=mappable, cax=ax3)

produced figure


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接