Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
Matplotlib多个分散子图-减少svg文件大小_Matplotlib_Svg_Scatter Plot_Subplot_Inkscape - Fatal编程技术网

Matplotlib多个分散子图-减少svg文件大小

Matplotlib多个分散子图-减少svg文件大小,matplotlib,svg,scatter-plot,subplot,inkscape,Matplotlib,Svg,Scatter Plot,Subplot,Inkscape,我在Matplotlib中生成了一个由50个子图组成的图。在每个子地块中,我都有一个大约3000个数据点的散点图。我之所以这样做,是因为我只想对我正在处理的文档中的不同散点图有一个概述 到目前为止,这也很有效,看起来不错,但问题显然是我得到的SVG文件非常大(大约15MB)。Word无法处理这么大的SVG文件 所以我的问题是:有没有办法优化这个SVG文件?散点图中的许多数据点相互重叠,因此我想应该可以在不改变可见输出的情况下删除其中许多“不可见”的数据点。(illustrator中的类似内容似乎

我在Matplotlib中生成了一个由50个子图组成的图。在每个子地块中,我都有一个大约3000个数据点的散点图。我之所以这样做,是因为我只想对我正在处理的文档中的不同散点图有一个概述

到目前为止,这也很有效,看起来不错,但问题显然是我得到的SVG文件非常大(大约15MB)。Word无法处理这么大的SVG文件

所以我的问题是:有没有办法优化这个SVG文件?散点图中的许多数据点相互重叠,因此我想应该可以在不改变可见输出的情况下删除其中许多“不可见”的数据点。(illustrator中的类似内容似乎就是我想做的:)在Inkscape中也可以做类似的事情吗?甚至直接在Matplotlib中


我知道我可以生成一个PNG文件,但我更喜欢在我的文档中以矢量图形的形式打印。

如果您想将所有数据点保留为矢量图形,则不太可能减小文件大小

虽然不理想,但一种可能的选择是仅光栅化由
ax.scatter
创建的数据点,并将轴、标签、标题等全部作为矢量元素保留在图形上。这可以显著减小文件大小,如果将dpi设置得足够高,则可能不会丢失绘图中的任何有用信息

您可以通过在调用
ax.scatter
时设置
rasterized=True
来实现这一点

然后,当您
fig.savefig
时,您可以使用
dpi=300
(或您想要的任何dpi)控制光栅化元素的dpi

考虑以下几点:

import matplotlib.pyplot as plt

figV, axesV = plt.subplots(nrows=10, ncols=5)
figR, axesR = plt.subplots(nrows=10, ncols=5)

for ax in figV.axes:
    ax.scatter(range(3000), range(3000))
for ax in figR.axes:
    ax.scatter(range(3000), range(3000), rasterized=True)

figV.savefig('bigscatterV.svg')
figR.savefig('bigscatterR.svg', dpi=300)

bigscatterV.svg
的文件大小为16MB,而
bigscatterR.svg
的文件大小仅为250KB。

关于Inkscape的问题最好还是继续提问。顺便说一句,我不希望从您描述的概念中得到文件大小的巨大减少,除非许多点具有精确的相同坐标,因此被完全删除。否则,你会得到和以前一样多的点,它们只是有不同的形状。你能分享一个示例文件吗?也许可以缩小文件的大小,但我们需要知道文件中的内容,然后才能给出合格的答案。非常感谢!这确实大大减少了文件大小,这正是我想要的。然而,现在我遇到了一个新问题。我的svg文件现在大约是4MB,这很好。但是我必须在将svg文件导入Word之前将其转换为emf文件(Word中有一个愚蠢的错误,导致它在使用svg文件时卡在保存循环中),并且在使用inkscape执行转换后,emf文件再次增长到60 MB。你知道为什么会这样吗?使用matplotlib直接输出eps文件时也会发生同样的情况。不知道,抱歉,我很少使用word/inkscape。使用
pdf
文件怎么样?是的,pdf文件也很小(大约2MB),质量很好。但是Word也有一些问题——Word只是在将pdf作为图像(可能是jpg)插入时生成pdf预览。不过,这又是一个愚蠢的词语问题。我可能应该换成乳胶…但无论如何,谢谢你们,你们的光栅化技巧真的很有帮助!