Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在可编辑的svg文件中保存python绘图中的文本?_Python_Svg_Text_Latex_Pgf - Fatal编程技术网

如何在可编辑的svg文件中保存python绘图中的文本?

如何在可编辑的svg文件中保存python绘图中的文本?,python,svg,text,latex,pgf,Python,Svg,Text,Latex,Pgf,我正在尝试将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('Sine

我正在尝试将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中更改字体、字体大小等,也无法在使用latex创建的PDF文件中搜索绘图中的文本元素

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

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

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

从头做起选项

带有红色圆圈的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>

您可能需要
在SVG中创建正弦波曲线。 更换上面的
元件。对于文本,请使用


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

从头开始执行选项

带有红色圆圈的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>

您可能需要
在SVG中创建正弦波曲线。 更换上面的
元件。对于文本,请使用


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

找到了答案。你可以用

new_rc_params = {'text.usetex': False,
"svg.fonttype": 'none'
}
mpl.rcParams.update(new_rc_params)
防止svg后端将文本呈现为路径。
有关更详细的说明,请参阅。

找到了答案。你可以用

new_rc_params = {'text.usetex': False,
"svg.fonttype": 'none'
}
mpl.rcParams.update(new_rc_params)
防止svg后端将文本呈现为路径。
有关更详细的说明,请参阅。

SVG格式是基于XML的fromat格式。如果您想自己从头开始,可以在这里找到规范:这意味着什么?我对XML一点也不熟悉。请参阅这里的教程:如果您在.svg文件中的abd标记之间保存代码。在我的回答中有更详细的说明(很快)。SVG格式是基于XML的fromat。如果您想自己从头开始,可以在这里找到规范:这意味着什么?我对XML一点也不熟悉。请参阅这里的教程:如果您在.svg文件中的abd标记之间保存代码。在我的回答中有更详细的说明(很快)。我已经创建了SVG文件(使用python)。它看起来也像我想要创建的,但是很明显,文本存储为图形而不是文本。它看起来也像我想要创建的,但显然文本存储为图形,而不是文本。这非常有效,也适用于在Latex中包含SVG文件并排版文本。这非常有效,也适用于在Latex中包含SVG文件并排版文本。