将颜色条添加到频谱图中

Adding Colorbar to a Spectrogram

我正在尝试将 Colorbar 添加到频谱图中。我已经尝试了我在网上找到的每个示例和问题线程,none 已经解决了这个问题

注意'spl1'(数据拼接1)是来自ObsPy的trace

我的代码是:

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() 创建数据的 'image',但是我没有从 Spectrogram() 获得输出,只有 'ax'。我已经看到一些地方尝试使用 spectrogram() 的 'ax,spec' 输出,但这会导致 TypeError。

我希望有人能帮助解决这个问题 - 我已经为此工作了一整天了!

this link 的帮助下解决了它。它还没有显示分贝,但主要问题是获取颜色条:

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)