Google Colab中gwpy包报matplotlib.pyplot无FigureManagerBase属性错误
问题原因
- 你使用的GWpy 2.0.4版本存在兼容性缺陷,与Google Colab默认的matplotlib 3.4+版本、ipykernel inline后端不匹配
- GWpy的
Plot类初始化逻辑中,降级兼容分支错误地从matplotlib.pyplot模块查找FigureManagerBase类,而该类实际存放在matplotlib.backend_bases模块下,因此触发属性不存在报错 - 本地运行正常是因为本地环境的matplotlib版本、后端配置与Colab不一致,未触发该错误分支
解决方案
推荐优先选择第一种方案,兼容性最好、改动最小:
方案1:替换GWpy的Plot类为原生matplotlib绘图
GWpy的TimeSeries对象原生支持matplotlib轴对象绘图,直接修改绘图函数即可,无需修改其他逻辑:
def plot_tseries(t1, t2, t3): # 直接用matplotlib创建子图 fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, sharex=True, figsize=(20, 12)) # 分别在三个轴上绘制时间序列 t1.plot(ax=ax1) t2.plot(ax=ax2) t3.plot(ax=ax3) # 统一设置坐标轴属性 ax3.set_xlim(0, 2) ax3.set_xlabel('Time [s]') plt.show()
方案2:给matplotlib打临时补丁
如果必须使用GWpy的Plot类,可在导入GWpy模块前手动补全缺失的类属性:
import matplotlib.pyplot as plt from matplotlib.backend_bases import FigureManagerBase, FigureCanvasBase # 手动给plt模块补上GWpy需要查找的类 plt.FigureManagerBase = FigureManagerBase plt.FigureCanvasBase = FigureCanvasBase # 之后再导入GWpy相关模块 from gwpy.timeseries import TimeSeries from gwpy.plot import Plot plt.style.use('ggplot')
方案3:降级matplotlib到兼容版本
执行以下命令安装低版本matplotlib,安装完成后重启Colab运行实例即可生效:
!pip install --force-reinstall matplotlib==3.1.3
注意:该方案可能影响其他依赖高版本matplotlib的包的正常运行。
内容的提问来源于stack exchange,提问作者Rohan_Paul
相关产品推荐
相关产品推荐

