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

时间:2014-06-26 08:01:59

标签: 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, :])

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

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

  1. 对文本进行矢量化,使其作为路径嵌入。 Matplotlib的SVG后端通过将rcParam的svg.fonttype'设置为'path'来支持这一点,但ps后端似乎没有直接支持它。这将是理想的解决方法。有没有办法做到这一点?
  2. 导出为.eps时,仅对文本进行Rasterise 。这将是一个不太理想的解决方法。可以这样做吗?

1 个答案:

答案 0 :(得分:2)

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

import matplotlib.pyplot as plt
import numpy as np
from subprocess import call

def saveEMF(filename):
    path_to_inkscape = "D:\Path\to\Inkscape\inkscape.exe"
    call([path_to_inkscape, "--file", filename,  "--export-emf",  filename[:-4]+".emf" ])

axes = plt.gca()
data = np.random.random((2, 100))
axes.plot(data[0, :], data[1, :])
plt.title("some title")
plt.xlabel(u"some x label [µm]")
plt.ylabel("some y label")

fn = "data.svg"
plt.savefig(fn)
saveEMF(fn)

saveEMF()函数保存在模块外部也可以随时掌握它。