Python中使用matplotlib.pyplot.show报错: FigureCanvasInterAgg‘ object has no attribute ‘tostring_rgb‘解决办法
·
一.问题
当在使用matplotlib.pyplot展示图片时,报错:
AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?相关代码:
import matplotlib.pyplot as plt # 可视化 def test_show_pig(x, y): plt.plot(x, y) plt.title('损失值曲线变化图') plt.grid() # 网格 plt.savefig('../data/fig/损失值曲线变化图.png') plt.show() # 展示执行后就报错:
Traceback (most recent call last): File "F:\www\py-data\DLProject\线性回归.py", line 144, in <module> train(x, y, coef) File "F:\www\py-data\DLProject\线性回归.py", line 95, in train plt.show() # 展示 ^^^^^^^^^^ File "C:\Users\zhoupenghui\AppData\Roaming\Python\Python312\site-packages\matplotlib\pyplot.py", line 613, in show return _get_backend_mod().show(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\Program Files\JetBrains\PyCharm 2023.2.5\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 29, in __call__ manager.show(**kwargs) File "D:\Program Files\JetBrains\PyCharm 2023.2.5\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 112, in show self.canvas.show() File "D:\Program Files\JetBrains\PyCharm 2023.2.5\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 73, in show buffer = self.tostring_rgb() ^^^^^^^^^^^^^^^^^ AttributeError: 'FigureCanvasInterAgg' object has no attribute 'tostring_rgb'. Did you mean: 'tostring_argb'?
二.原因
错误是由于 PyCharm 的特殊后端导致的。PyCharm 使用了自己的 matplotlib 后端
backend_interagg,而这个后端缺少tostring_rgb方法
三.解决方法
方案1:在 PyCharm 中禁用科学模式(推荐)
打开 PyCharm
点击菜单栏的
文件(File)→设置(Settings)在搜索框中输入
科学模式或Scientific Mode找到
工具(Tools)→Python Scientific取消勾选 "在工具窗口中显示图(Show plots in tool window)"
点击
应用(Apply)和确定(OK)重启 PyCharm 并重新运行代码

方案2:明确设置标准后端
# 在代码开头添加
import matplotlib
# 尝试使用标准后端
matplotlib.use('TkAgg') # 或 'Qt5Agg', 'MacOSX' 等
import matplotlib.pyplot as plt
方案3:使用 try-except 包装 plt.show(
try:
plt.show()
except AttributeError as e:
if 'tostring_rgb' in str(e):
print("检测到 PyCharm 后端问题,改用保存图片...")
plt.savefig('pycharm_fallback.png')
print("图片已保存为 'pycharm_fallback.png'")
else:
raise
方案4:完整的修复代码
# 导入相关模块
import torch
from torch.utils.data import TensorDataset
from torch.utils.data import DataLoader
from torch import nn
from torch import optim
from sklearn.datasets import make_regression
# 设置matplotlib后端
import matplotlib
try:
# 尝试使用标准后端
matplotlib.use('TkAgg')
print("使用 TkAgg 后端")
except:
try:
matplotlib.use('Qt5Agg')
print("使用 Qt5Agg 后端")
except:
print("使用默认后端")
import matplotlib.pyplot as plt
# 你的其他代码...
方案5:修改函数中的绘图部分
def test_show_pig(x,y)
# 绘图部分
plt.figure(figsize=(10, 6))
plt.plot(x, y, label='预测值', color='blue')
plt.legend()
plt.grid()
# 使用 try-except 处理显示问题
try:
plt.show()
except AttributeError as e:
if 'tostring_rgb' in str(e):
# PyCharm 特定问题,保存图片
plt.savefig('prediction_result.png', dpi=300, bbox_inches='tight')
print("PyCharm 显示问题,图片已保存为 'prediction_result.png'")
else:
# 其他错误
plt.savefig('prediction_result.png', dpi=300, bbox_inches='tight')
print(f"显示错误: {e}")
print("图片已保存为 'prediction_result.png'")
except Exception as e:
# 其他异常
print(f"发生错误: {e}")
plt.savefig('prediction_result.png', dpi=300, bbox_inches='tight')
print("图片已保存为 'prediction_result.png'")
plt.close() # 清理图形
方案6:最简单的临时解决方案
将
plt.show()替换为保存图片
# 替换这行
# plt.show()
# 为这行
plt.savefig('prediction_plot.png', dpi=300, bbox_inches='tight')
plt.close()
print("图片已保存为 'prediction_plot.png'")
方案7:检查并更新 PyCharm
确保你的 PyCharm 是最新版本
更新 matplotlib:
pip install --upgrade matplotlib在 PyCharm 中重置设置:
文件(File) → 管理IDE设置(Manage IDE Settings) → 恢复默认设置(Restore Default Settings)
这里我使用的是方案一解决的
更多推荐


所有评论(0)