3

我正在尝试将 python 图保存为 svg 文件:

import matplotlib as mpl
mpl.use('svg')
import matplotlib.pyplot as plt
import numpy as np

plt.figure()
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('Phase $\phi$')
plt.ylabel('Signal')
plt.savefig('SineSignal.svg', format = 'svg')

工作至今。但是一旦我在 Inkscape 中打开文件,我就不能再编辑文本了。似乎python将文本保存为图形而不是文本。因此,我既不能在 Inkscape 中更改字体、字体大小等,也不能在我用乳胶创建的 PDF 文件的图中搜索文本元素。

另一种选择是将绘图保存为 PGF(在这种情况下,mpl.use('svg') 必须替换为 mpl.use('pgf')):

plt.savefig('SineSignal.pgf')

这样我仍然无法编辑字体/字体大小,但至少我可以在 pdf 中搜索文本元素。

有什么建议么?在 python 中使用 TikZ 不是一种选择,因为功能非常有限,而且绘图看起来会有所不同。

4

2 回答 2

6

找到了答案。您可以使用

new_rc_params = {'text.usetex': False,
"svg.fonttype": 'none'
}
mpl.rcParams.update(new_rc_params)

以防止 svg 后端将文本呈现为路径。有关更详细的说明,请查看是否有一种有效的方法将 2D 图存储为 python 中的矢量图形?.

于 2018-05-28T09:32:21.363 回答
1

从头开始选项

带有红色圆圈的 SVG 文件的最小代码;保存到circle.svg

<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200">
  <circle id="circle--red" cx="30" cy="30" r="30" fill="#f00"/>
</svg>

您可能需要<path>在 SVG 中创建正弦波曲线。 https://www.w3schools.com/graphics/svg_path.asp替换<circle>上面的元素。对于文本,请使用<text>https ://www.w3schools.com/graphics/svg_text.asp

如果你想要轴,你可以自己生成,但使用 Inkscape 或其他支持 SVG 的图形编辑器可能有助于为轴创建原型。

于 2018-05-15T08:47:36.387 回答