matplotlib:生成矢量图

pvl*_*pvl 14 matplotlib vector-graphics

我想用matplotlib生成一个矢量图.我努力了 - 但输出是光栅图像.这是我使用的:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

最后:

myfig.savefig('myfig.eps', format='eps')
Run Code Online (Sandbox Code Playgroud)

我发现导出ps给出了一个矢量图像,但问题eps仍然存在.

tux*_*ano 8

如果您需要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)
Run Code Online (Sandbox Code Playgroud)

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

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


小智 7

我使用以下代码:

from matplotlib import pyplot as plt

fig, ax = plt.subplots() # or 
fig.savefig('filename.eps', format='eps')
Run Code Online (Sandbox Code Playgroud)


nee*_*eel 5

可以尝试svg格式:

plt.savefig("filepath.svg", format = 'svg', dpi=300)
Run Code Online (Sandbox Code Playgroud)


Cra*_*aig 1

尝试导出为 pdf 或 svg,如http://neuroscience.telenczuk.pl/?p=331中所述 。如果您需要 eps,则 pdf2ps 命令效果很好。