如何使matplotlib导出的SVG在Illustrator中支持完整文本编辑?
解决Matplotlib导出SVG在Illustrator中可整体编辑文本的问题
问题复盘
使用Python 3.8的Matplotlib导出SVG图表后,导入Adobe Illustrator CC 2018/22.1时出现两个问题:
- 英文文本(如"Irradiance")被拆分为单个字母,无法整体编辑;数字则保持完整文本状态。
- 偶尔弹出提示:"The document uses fonts which are not available",关闭后字体显示正常,但提示并非每次出现。
核心原因
文本拆分是因为Matplotlib的SVG导出设置可能将文本转为路径,或字体嵌入方式导致AI无法识别为完整文本对象;字体提示则源于SVG未正确嵌入字体信息,或AI本地缺少对应字体的匹配项。
分步解决方案
1. 调整Matplotlib的SVG导出参数
确保配置正确的字体和SVG渲染设置,避免文本被拆分为路径:
import matplotlib as mpl import matplotlib.pyplot as plt # 重置默认参数并配置字体 mpl.rcParams.update(mpl.rcParamsDefault) mpl.rcParams['font.family'] = 'Open Sans' mpl.rcParams['font.size'] = 14 # 关键设置:保留原生文本对象,不转为路径 mpl.rcParams['svg.fonttype'] = 'none' # 禁用TeX渲染,避免TeX将文本拆分为单个字符 mpl.rcParams['text.usetex'] = False # 指定备选字体,确保字体名称匹配系统已安装字体 mpl.rcParams['font.sans-serif'] = ['Open Sans', 'sans-serif']
2. 保存SVG时强制嵌入字体
在savefig中添加字体嵌入参数,解决AI的字体缺失提示:
# 替换为你的实际保存路径 fig.savefig(Directory + 'my_figure.svg', transparent=True, metadata={'svg': {'font-embed': 'True'}})
3. 验证系统字体可用性
- 确认本地已安装Open Sans字体,若未安装,先完成字体安装后再导出SVG。
- 若字体名称不匹配,可通过以下代码查看系统中可用的Open Sans字体全名:
import matplotlib.font_manager as fm for font in fm.fontManager.ttflist: if 'Open Sans' in font.name: print(font.name)
将输出的正确字体名称替换到mpl.rcParams['font.family']中。
4. 优化文件路径处理(可选)
使用pathlib管理路径,避免拼接错误:
from pathlib import Path save_path = Path(Directory) / 'my_figure.svg' fig.savefig(save_path, transparent=True, metadata={'svg': {'font-embed': 'True'}})
效果验证
按上述配置导出SVG后,导入Illustrator即可实现:
- 英文文本以完整文本块呈现,支持整体编辑。
- 字体缺失提示不再出现(若本地已安装对应字体)。
内容的提问来源于stack exchange,提问作者quantum girl
相关产品推荐
相关产品推荐

