使用Obspy的spectrogram函数绘图时如何限制Y轴范围并解决报错
报错原因
ObsPy的Stream.spectrogram()方法在show=False、未指定axes参数时,返回的不是单个Matplotlib Figure对象,而是和Stream内通道数一一对应的Figure列表。你当前的Stream仅包含1道数据,因此fig是长度为1的列表,直接对列表调用axes属性自然会抛出不存在该属性的错误。
解决方案
这里提供两种可行的修改方式:
方案1:直接操作返回列表中的Figure对象
仅需要修改你代码的倒数第二行,取列表的第一个元素访问axes即可:
# 原报错行:fig.axes[0].set_ylim(0,100) # 修改为: fig[0].axes[0].set_ylim(0, 100)
方案2:提前手动创建Axes传入(更可控)
提前创建Matplotlib的画布和轴对象,传入spectrogram方法,直接操作自己定义的轴对象即可,适合后续要做更多自定义绘图的场景,完整修改后的绘图部分代码如下:
""" Plot the spectrogram """ # 提前创建画布和轴 fig, ax = plt.subplots() # 将创建好的ax传入spectrogram的axes参数 st.spectrogram(log=False, dbscale=True, axes=ax, title='Spectrogram', cmap='inferno', show=False) # 直接操作ax设置y轴范围 ax.set_ylim(0, 100) plt.show()
内容的提问来源于stack exchange,提问作者Andrew Creel
相关产品推荐
相关产品推荐

