导出.eps文件时在Matplotlib中转换文本

Erl*_*gen 11 python matplotlib eps

我希望能够保存Matplotlib图并将它们直接添加为Microsoft Word文档中的矢量图形.但是,Word和Matplotlib支持的唯一格式是.eps,如果我尝试的话,Word中的轴文本完全丢失.我会给你看:

这是一个最小的工作示例脚本:

import matplotlib.pyplot as plt
import numpy as np

axes = plt.gca()
data = np.random.random((2, 100))
axes.plot(data[0, :], data[1, :])
Run Code Online (Sandbox Code Playgroud)

显然,Matplotlib在.eps文件中保存文本的方式与Word从.eps文件中读取文本的方式不兼容.导出的.eps文件在PS_View中看起来很好.

我可以想到两个解决方法,但我不知道如何实现它们或者在Matplotlib中它是否完全可行:

  1. 矢量化文本,使其作为路径嵌入.这是由Matplotlib的SVG后端由rcParam"svg.fonttype"设定为"路径"的支持,但它似乎并没有被PS后端直接支持.这将是理想的解决方法.有没有办法做到这一点?
  2. 导出为.eps时刻录文本.这将是一个不太理想的解决方法.可以这样做吗?

Imp*_*est 3

正如 sebacastroh 指出的那样,可以将 matplotlib 图形保存为svgusing plt.savefig(),然后使用 Inkscape 进行svg和之间的转换emf。任何 Office 程序都可以轻松读取增强型元文件 (emf)。
\n这可以自动化,就像这样

\n\n
import matplotlib.pyplot as plt\nimport numpy as np\nfrom subprocess import call\n\ndef saveEMF(filename):\n    path_to_inkscape = "D:\\Path\\to\\Inkscape\\inkscape.exe"\n    call([path_to_inkscape, "--file", filename,  "--export-emf",  filename[:-4]+".emf" ])\n\naxes = plt.gca()\ndata = np.random.random((2, 100))\naxes.plot(data[0, :], data[1, :])\nplt.title("some title")\nplt.xlabel(u"some x label [\xc2\xb5m]")\nplt.ylabel("some y label")\n\nfn = "data.svg"\nplt.savefig(fn)\nsaveEMF(fn)\n
Run Code Online (Sandbox Code Playgroud)\n\n

保存也可能是有意义的saveEMF()将函数外部保存在模块中以便始终可以使用它

\n