gpt4 book ai didi

Matplotlib 多个散点图 - 减小 svg 文件大小

转载 作者:行者123 更新时间:2023-12-03 18:45:35 25 4
gpt4 key购买 nike

我在 Matplotlib 中生成了一个由 50 个子图组成的图。在这些子图中的每一个中,我都有一个包含大约 3000 个数据点的散点图。我这样做是因为我只想概览我正在处理的文档中的不同散点图。

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

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

我知道我只能生成一个 PNG 文件,但我更喜欢在我的文档中将绘图作为矢量图形。

最佳答案

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

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

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

然后,您可以在 dpi=300 时使用 fig.savefig (或您想要的任何 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。

关于Matplotlib 多个散点图 - 减小 svg 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51418310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com