2012-02-13 70 views
8

我想用matplotlib生成矢量图。我努力尝试 - 但输出是一个光栅图像。下面是我用什么:matplotlib:生成矢量图

import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

最后:

myfig.savefig('myfig.eps', format='eps') 

我发现,出口ps给人一种矢量图像,但eps问题仍然存在。

+4

你可以举一个例子(如果你需要补充一些数据)实际调用'plt'吗?这将有助于他人的贡献。 – Yann 2012-02-13 18:59:31

+1

我相信你所描述的问题并不像你所建议的那样,而且eps输出真的是一个完全成熟的矢量翻译。这可能是因为你正在通过一个可怜的查看器查看eps - 你使用哪个应用程序查看eps? – pelson 2012-07-17 10:15:29

+0

'plt.savefig('some_name.eps',bbox_inches ='tight')'在我的系统上产生一个向量化图。 – mab 2015-10-21 15:17:01

回答

5

我使用下面的代码:

from matplotlib import pyplot as plt 

fig, ax = plt.subplots() # or 
fig.savefig('filename.eps', format='eps') 
3

如果需要EMF文件输出格式,例如插入优质地块到MS Word/PowerPoint和您愿意使用Inkscape中的转换器可以应用该解决方案:

from matplotlib import pyplot as plt 
import subprocess, os 

def plot_as_emf(figure, **kwargs): 
    inkscape_path = kwargs.get('inkscape', "C://Program Files//Inkscape//inkscape.exe") 
    filepath = kwargs.get('filename', None) 

    if filepath is not None: 
     path, filename = os.path.split(filepath) 
     filename, extension = os.path.splitext(filename) 

     svg_filepath = os.path.join(path, filename+'.svg') 
     emf_filepath = os.path.join(path, filename+'.emf') 

     figure.savefig(svg_filepath, format='svg') 

     subprocess.call([inkscape_path, svg_filepath, '--export-emf', emf_filepath]) 
     os.remove(svg_filepath) 

为了测试这个功能,你可以运行一个简单的例子:

plt.plot([1,2], [4,5]) 
fig = plt.gcf() 
plot_as_emf(fig, filename="C:/test.emf")