matplotlib:生成矢量图

matplotlib:生成矢量图,matplotlib,vector-graphics,Matplotlib,Vector Graphics,我想用matplotlib生成一个向量图。我尽力了,但输出是光栅图像。以下是我使用的: import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt 最后: myfig.savefig('myfig.eps', format='eps') 我发现导出到ps会提供矢量图像,但eps的问题仍然存在。尝试导出为pdf或svg,如中所述 如果您需要eps,pdf2ps命令非常有效。我使用以下代码: from matpl

我想用matplotlib生成一个向量图。我尽力了,但输出是光栅图像。以下是我使用的:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
最后:

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

我发现导出到
ps
会提供矢量图像,但
eps
的问题仍然存在。

尝试导出为pdf或svg,如中所述
如果您需要eps,pdf2ps命令非常有效。

我使用以下代码:

from matplotlib import pyplot as plt

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

如果您需要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")

可以尝试svg格式:

plt.savefig("filepath.svg", format = 'svg', dpi=300)

您能否给出一个实际调用
plt
的示例(如果需要,请编写一些数据)?这将有助于其他人做出贡献。我相信,您描述的问题并非如您所建议的那样,eps输出确实是一个成熟的矢量格式副本。可能是您通过一个糟糕的查看器查看eps-您使用哪个应用程序查看eps?
plt.savefig('some_name.eps',bbox_inches='tight')
在我的系统上生成矢量化绘图。