You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyCharm中调用matplotlib.pyplot.show()报AttributeError错误的排查与解决求助

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:

  1. 打开PyCharm,点击File > Settings > Appearance & Behavior > System Settings > Updates
  2. 检查是否有可用更新,点击下载并安装
  3. 重启PyCharm后再测试代码

方法4:禁用PyCharm的科学绘图工具窗口

如果以上方法都不行,可以直接关闭PyCharm对Matplotlib的集成,让Matplotlib用自己的默认后端:

  1. 打开File > Settings > Tools > Python Scientific
  2. 取消勾选Show plots in toolwindow选项
  3. 重启PyCharm,运行代码后会弹出原生的Matplotlib绘图窗口

另外补一句,之前能正常运行的原因是当时你的Matplotlib版本还没更新到移除tostring_rgb的版本,可能是某次自动更新pip依赖的操作,悄悄升级了Matplotlib才导致的这个兼容性问题~

火山引擎 最新活动