我正在寻找一种将matplotlib图保存为EMF文件的方法。 Matplotlib允许我保存为PDF或SVG矢量文件,但不能保存为EMF。
经过长时间的搜索后,我仍然无法通过python找到一种方法。希望任何人都有一个想法。
我的解决方法是使用子进程调用inkscape,但这远非理想,因为我希望避免使用外部程序。
我正在使用wx后端运行python 2.7.5和matplotlib 1.3.0。
答案 0 :(得分:1)
我知道操作人员不希望出现墨迹混乱,但是后来找到此帖子的人只是想使其发挥作用。
import matplotlib.pyplot as plt
import subprocess
import os
inkscapePath = r"path\to\inkscape.exe"
savePath= r"path\to\images\folder"
def exportEmf(savePath, plotName, fig=None, keepSVG=False):
"""Save a figure as an emf file
Parameters
----------
savePath : str, the path to the directory you want the image saved in
plotName : str, the name of the image
fig : matplotlib figure, (optional, default uses gca)
keepSVG : bool, whether to keep the interim svg file
"""
figFolder = savePath + r"\{}.{}"
svgFile = figFolder.format(plotName,"svg")
emfFile = figFolder.format(plotName,"emf")
if fig:
use=fig
else:
use=plt
use.savefig(svgFile)
subprocess.run([inkscapePath, svgFile, '-M', emfFile])
if not keepSVG:
os.system('del "{}"'.format(svgFile))
import numpy as np
tt = np.linspace(0, 2*3.14159)
plt.plot(tt, np.sin(tt))
exportEmf(r"C:\Users\userName", 'FileName')
答案 1 :(得分:0)
如果您的Matplotlib文件以PDF格式保存,则可以使用文件转换工具(例如https://www.freefileconvert.com/pdf-emf)将其转换为emf(增强型Windows图元文件)。
答案 2 :(得分:0)
我认为该功能很酷,但在我的情况下,inkscape语法似乎不起作用。我在其他帖子中搜索,发现为:
inkscape filename.svg-导出文件名filename.emf
因此,如果我在子进程参数中用--export-filename替换“ -M”,则一切正常。