PyCharm中调用matplotlib.pyplot.show()报AttributeError错误的排查与解决求助
嗨,这个问题我之前帮朋友排查过,核心是PyCharm自带的Matplotlib可视化后端和你当前的Matplotlib版本闹矛盾了!之前能正常运行现在突然报错,大概率是最近环境里的Matplotlib自动更新了,或者PyCharm的插件缓存出了小问题,结合你给出的关键报错信息:
AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?
下面给你几个亲测有效的解决办法,按优先级从高到低尝试:
方法1:强制切换Matplotlib后端,绕开PyCharm的内置后端
最快速的解决方式是直接在代码里指定Matplotlib使用原生后端,完全避开PyCharm那个出问题的内置后端。修改你的代码,在导入pyplot之后立刻加上后端切换的代码:
from matplotlib import pyplot # 新增这行,指定使用原生的TkAgg后端(如果系统没有Tk依赖,换成'QtAgg'也可以) pyplot.switch_backend('TkAgg') from sarpy.visualization.remap import Density from sarpy.io.product.converter import open_product from sarpy.io.complex.converter import open_complex reader = open_complex("C:\\Math\\deespe_v6\\dsp-presar-octave\\raw\\2023-09-09-01-30-06_UMBRA-05_SICD.nitf") chip = reader[:500, :500] remap_function = Density() fig, axs = pyplot.subplots(nrows=1, ncols=1, figsize=(5, 5)) axs.imshow(remap_function(chip), cmap='gray') pyplot.show()
修改后直接运行,应该能正常弹出Matplotlib的原生绘图窗口。
方法2:降级Matplotlib到兼容版本
如果不想修改代码,你可以把Matplotlib降级到和PyCharm后端兼容的版本。报错里的tostring_rgb方法在Matplotlib 3.8+版本中被移除了,所以降级到3.7.x系列的稳定版本即可:
打开PyCharm底部的Terminal终端,运行以下命令:
pip install matplotlib==3.7.5 --force-reinstall
安装完成后重启PyCharm,再运行你的原有代码就能恢复正常。
方法3:更新PyCharm到最新版本
PyCharm的开发团队可能已经修复了这个后端兼容问题,你可以尝试升级到最新版PyCharm:
- 打开PyCharm,点击
File > Settings > Appearance & Behavior > System Settings > Updates - 检查是否有可用更新,点击下载并安装
- 重启PyCharm后再测试代码
方法4:禁用PyCharm的科学绘图工具窗口
如果以上方法都不行,可以直接关闭PyCharm对Matplotlib的集成,让Matplotlib用自己的默认后端:
- 打开
File > Settings > Tools > Python Scientific - 取消勾选
Show plots in toolwindow选项 - 重启PyCharm,运行代码后会弹出原生的Matplotlib绘图窗口
另外补一句,之前能正常运行的原因是当时你的Matplotlib版本还没更新到移除tostring_rgb的版本,可能是某次自动更新pip依赖的操作,悄悄升级了Matplotlib才导致的这个兼容性问题~




