我要导出不包含“不必要”补丁的图。以下代码导出一个图形,该图形具有不可见的零字母补丁:
plt.title("Test")
plt.plot()
plt.gca().patch.set_alpha(0.)
plt.gcf().patch.set_alpha(0.)
plt.savefig('test.svg')
尽管这些补丁不可见,但它们的几何形状阻碍了Inkscape正确调整页面大小以适应其内容。如果将这些“不必要的”补丁去除,则可以使用例如墨迹:
如何绘制没有补丁的图形或以编程方式删除图形和轴的补丁?
答案 0 :(得分:0)
SVG是文本文件。使用文本编辑器并删除以下部分:
<g id="patch_3">
<path d="M 54 252
L 54 34.56
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
</g>
<g id="patch_4">
<path d="M 388.8 252
L 388.8 34.56
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
</g>
<g id="patch_5">
<path d="M 54 252
L 388.8 252
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
</g>
<g id="patch_6">
<path d="M 54 34.56
L 388.8 34.56
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
</g>
细节可以有所不同,但是您可以使用fill:none
来确定样式。
编辑1 可以使用Inkscape渲染和编辑SVG文件。借助其XML编辑器,可以轻松找到所有不需要的元素并将其在XML编辑器中删除。
答案 1 :(得分:0)
对于普通的MWE,这似乎可以解决问题。我希望它能满足您的需求。
import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox
from matplotlib.transforms import TransformedBbox
fig, ax = plt.subplots()
plt.title("Test")
ax.plot()
plt.savefig('test.svg', bbox_inches = TransformedBbox(Bbox(ax.bbox.get_points()),transform=fig.dpi_scale_trans.inverted()) )
策略是获取斧头bbox,然后将其用作savefig的参数(它需要转换为数字英寸)。
更多内容在这里
https://matplotlib.org/3.1.1/api/transformations.html#matplotlib.transforms.TransformedBbox
https://matplotlib.org/tutorials/advanced/transforms_tutorial.html
编辑
更清洁的解决方案:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
plt.title("Test")
ax.plot()
fig.patch.set_visible(False)
plt.savefig('test.svg',)
最好的解决方案现在取决于您的具体情况。