You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows更新后Matplotlib+LaTeX无法保存PDF绘图求助

解决Matplotlib使用LaTeX保存PDF时的UnicodeDecodeError问题

从你的错误日志能一眼定位问题根源:你的用户名包含非ASCII字符(Fábio里的á),Windows更新后,Matplotlib在读取TeX字体映射文件pdftex.map时,强制用ASCII编码解码路径,导致无法处理包含特殊字符的路径,最终触发了UnicodeDecodeError。

下面给你几个可行的解决方案,按推荐程度排序:

方案1:修改Matplotlib的dviread.py文件(一劳永逸)

找到你Anaconda环境下的dviread.py文件,路径大概是C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\dviread.py:

  1. 打开这个文件,找到第1057行(对应你错误日志里的报错行):
    return result.decode('ascii')
    
  2. 把它改成:
    return result.decode('utf-8')
    
  3. 保存文件后重启Spyder,再运行代码就能正常保存PDF了。

这个修改让Matplotlib用UTF-8解码路径,完美兼容包含非ASCII字符的路径。

方案2:转移文件到无特殊字符的路径(快速临时解决)

把你的脚本文件plotter.py移到一个不含非ASCII字符的目录下,比如C:\Temp\,然后修改保存路径为这个目录:

plt.savefig('C:/Temp/plot.pdf', bbox_inches='tight')

这样避开了包含特殊字符的用户目录,也能快速解决问题。

方案3:手动指定pdftex.map的路径

如果你能找到MiKTeX中pdftex.map的位置(一般在C:\Program Files\MiKTeX\miktex\data\fonts\map\pdftex\pdftex.map),可以在代码开头添加以下配置:

import matplotlib
# 强制使用指定的字体映射文件
matplotlib.rcParams['dvipng.filename'] = r'C:\Program Files\MiKTeX\miktex\data\fonts\map\pdftex\pdftex.map'

不过这个方法需要你准确找到文件位置,不如前两个方便。

补充说明

为什么保存PNG、EPS没问题?因为这些格式的保存流程不需要读取TeX字体映射文件,只有PDF保存时会触发这个路径解码的步骤,而Windows更新后Matplotlib的编码处理逻辑变严格了,才导致之前正常的代码现在出错。

内容的提问来源于stack exchange,提问作者Fábio Nascentes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:15:59