matplotlib 保存pdf图时,TrueType font is missing table.

 

=============================

matplotlib 保存pdf 图时,TrueType font is missing table.

 E:\Eprogramfiles\Anaconda3\lib\site-packages\matplotlib\backends\_backend_pdf_ps.py:102: RuntimeWarning: Glyph 8722 missing from current font.
  font.set_text(s, 0.0, flags=ft2font.LOAD_NO_HINTING)
The PDF backend does not currently support the selected font.

 

图片

 解决方案

增加一行代码即可:

 plt.rcParams['pdf.fonttype'] = 42  # 可行
 plt.savefig(r"xxx.pdf", bbox_inches='tight')

 

好像更新ipython和matplotlib最新版本能够解决。

 

 

========================================

在使用Matplotlib保存图形时遇到“TrueType font is missing table”的错误通常是因为字体文件不完整或者缺少某些必需的表。这种问题经常发生在尝试保存图形到某些格式(如PDF或SVG)时,尤其是当字体文件(如TrueType字体)不包含所有必要的字体表时。

解决方案

1. 使用完整的字体文件

确保你使用的字体文件是完整的,特别是当你打算将其用于图形输出时。例如,如果你正在使用Windows操作系统,可以尝试使用系统中预装的字体,如Arial、Times New Roman等。

2. 指定字体路径

在Matplotlib中,你可以指定字体的路径来避免这个问题。这可以通过设置matplotlibrc配置文件或者在使用matplotlib.font_manager动态指定字体来实现。

使用matplotlibrc配置文件:

在Matplotlib的配置文件中(通常是matplotlibrc或者在你的项目目录下的matplotlibrc),你可以添加或修改以下行来指定字体路径:

font.family: sans-serif
font.sans-serif: Arial, DejaVu Sans, Liberation Sans, Bitstream Vera Sans, Computer Modern Sans Serif

确保你的字体文件路径被正确包含在列表中。

动态指定字体路径:‌ 

import matplotlib.pyplot as plt from matplotlib.font_manager
import FontProperties
font_path = 'path/to/your/font.ttf' # 替换为你的字体文件路径
font_prop = FontProperties(fname=font_path)
plt.title('示例标题', fontproperties=font_prop)
plt.show()

3. 安装缺失的字体表

如果你有权限修改字体文件,可以尝试使用字体编辑工具(如FontForge)来添加缺失的表。这通常不是一个推荐的方法,因为它可能会损坏字体文件或者引入其他问题。通常,更好的做法是使用一个完整的字体文件。

4. 使用支持更完整字体的格式

当你保存图形时,选择一个对字体支持更好的格式。例如,PNG或JPEG格式通常不会遇到这种问题,因为它们不依赖于字体的嵌入。如果你必须使用PDF或SVG,确保你的字体文件是完整的,并且正确地设置在Matplotlib中。 

plt.savefig('figure.pdf') # 改为PNG或JPEG以避免字体问题

总结

确保你的字体文件是完整的,并通过Matplotlib正确设置或指定字体路径。如果你频繁遇到这个问题,考虑使用支持较少字体问题的图像格式(如PNG或JPEG)。如果问题仍然存在,尝试在不同的系统或环境中测试你的代码,以排除特定环境的问题

 

posted @ 2025-11-12 14:38  emanlee  阅读(31)  评论(0)    收藏  举报