我有以下演示代码,其中我创建了一个简单的散点图,并将其保存为
对于大量的点,我期望矢量化的
这是什么原因呢?我的理解是当我们将整个图形光栅化时,它会变成像
演示代码:
png
、完全矢量化的eps
和部分光栅化的eps
。对于大量的点,我期望矢量化的
eps
文件大小比png
文件要大得多(至少在合理的dpi下),这也是我观察到的。当我将散点图光栅化时,我希望文件大小能够回到png
的大小,因为实际上我只是在eps
中“嵌入”了png
,对吗?然而,光栅化版本的文件大小却完全膨胀了约20倍:
png
: 48K,完全矢量化的eps
: 184K,光栅化的eps
: 3.8M(在Linux openSUSE上,使用python 3.4.6
和matplotlib 2.2.2
)。这是什么原因呢?我的理解是当我们将整个图形光栅化时,它会变成像
png
一样小,这种理解是错误的吗?当我将png
放入inkscape并导出为eps
时,我得到的文件(显然是光栅化的)比原始的png
文件稍微大一点。演示代码:
import matplotlib.pyplot as plt
import numpy as np
# Prepare some random data
N = 10000
x = np.random.rand(N)
y = np.random.rand(N)
dpi = 150
# Create a figure and plot some points
fig = plt.figure()
ax = fig_mesh.add_subplot(111)
scatter = ax.scatter(x, y, zorder=0.5)
# Save it as png or unrasterized eps
fig_mesh.savefig('mesh.png', dpi=dpi) # 184K
fig_mesh.savefig('mesh.eps') # 48 K
# Save it with rasterized points
ax_mesh.set_rasterization_zorder(1)
fig_mesh.savefig('mesh_rasterized.eps', dpi=dpi, rasterized=True) # 3.8M!
提前感谢您!
eps
文件,我发现大部分文件由bmp组成。事实证明,我的光栅化理解是错误的:虽然我认为光栅化部分会被转换为固定分辨率的png样式图像,但它们仍然具有无限的分辨率。只是没有光栅化,我们会得到许多绘制矩形的向量指令(这可能需要长时间渲染,取决于查看器),而有了光栅化,我们得到一个巨大的位图,可能更快地呈现。现在回答自己的问题是否好的礼节? - kuadrat