将 matplotlib 导出为 emf 并避免黑色背景填充

Export matplotlib as emf and avoid black bacground fill

前面的讨论 [1] 帮助我们将 matplotlib 图导出为 .emf 文件。然而,奇怪的错误是输出文件有节点填充黑色背景,如下所示。

如何获得与 .svg 完全相同的 .emf?

import matplotlib.pyplot as plt
import subprocess, os

# Graph with 4 nodes - its coordinates
x = [0, 5, 5, 0]
y = [0, 0, 5, 5]

fig, ax = plt.subplots()

# Plot the vertices
for i in range(len(x)):
        ax.plot(x[i], y[i], 'ro',
                 markersize = 12,
                 fillstyle = 'none',
                 label = 'A')

# Plot the edges
plt.plot(x,y)

# Legend
handles, labels = plt.gca().get_legend_handles_labels()
by_label = dict(zip(labels, handles))
plt.legend(by_label.values(), by_label.keys())

# File export
inkscape_path = "C://Program Files//Inkscape//bin//inkscape.exe"
out_file = "C:/Users/banbar/Desktop/out1.emf"

path, filename = os.path.split(out_file)
filename, extension = os.path.splitext(filename)

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

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

subprocess.call([inkscape_path, svg_filepath, '--export-filename', emf_filepath])   

这只是答案的一半,也就是SVG的一半:

当您在 Inkscape 中 select 这些方块之一时,您可能会注意到它在左下角填充指示器所在的位置显示 'Fill unset'。

那是因为 matplotlib 完全忽略了 fill 属性。 SVG 中的有效值是 'none' 或不透明度 = 0 的填充颜色。

我在这里找到了关于如何确定填充颜色的 link: https://matplotlib.org/2.1.1/api/_as_gen/matplotlib.pyplot.plot.html

你应该能够从那里找出其余的,希望如此。