将颜色条添加到频谱图中
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。
- 我找到了非常相似的代码,但没有用 https://www.nicotrebbin.de/wp-content/uploads/2012/03/bachelorthesis.pdf (ctrl+f 'colorbar')
- 查看代码示例from a related question
- imshow() suggestions and example - 无法从频谱图获取输出以转换为图像。那第二个 link,我也无法让 mlpy 模块工作(它认为没有 mlpy.wavelet 函数)
- 此问题已在 an improvement post for obspy 中解决,但并未给出他声称找到的解决方案
我希望有人能帮助解决这个问题 - 我已经为此工作了一整天了!
在 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)
我正在尝试将 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。
- 我找到了非常相似的代码,但没有用 https://www.nicotrebbin.de/wp-content/uploads/2012/03/bachelorthesis.pdf (ctrl+f 'colorbar')
- 查看代码示例from a related question
- imshow() suggestions and example - 无法从频谱图获取输出以转换为图像。那第二个 link,我也无法让 mlpy 模块工作(它认为没有 mlpy.wavelet 函数)
- 此问题已在 an improvement post for obspy 中解决,但并未给出他声称找到的解决方案
我希望有人能帮助解决这个问题 - 我已经为此工作了一整天了!
在 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)