尽管rasterized = True,为什么matplotlib图形文件大?

时间:2018-02-20 11:24:09

标签: python matplotlib

一个简单的例子:

from matplotlib.pyplot import plot, savefig
from numpy.random import randn

plot(randn(100),randn(100,500),"k",alpha=0.03,rasterized=True)
savefig("test.pdf",dpi=90)

产地:

enter image description here

但文件大小约为8Mb。有什么想法会出错吗?这可能是个错误吗?我使用的是Python 3.5.1和Matplotlib 2.1.2。

2 个答案:

答案 0 :(得分:1)

使用rasterized=True,您将获得带有嵌入式位图的PDF(可能很大)。 使用rasterized=False,您可以获得包含大量嵌入式绘图指令的PDF(这些指令不是很大,但可能需要一段时间才能渲染)。

使用rasterized=False,我会得到一份374 KiB文件。

编辑:深入挖掘rasterized=True文档(时间大约为7兆字节),看起来每行都有自己的位图,并且它们被重叠:

$ pdfimages -list -all test.pdf
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image     408   177  rgb     3   8  image  no        12  0    90    90 4192B 1.9%
   1     1 smask     408   177  gray    1   8  image  no        12  0    90    90 7511B  10%
   1     2 image     408   170  rgb     3   8  image  no        13  0    90    90 4472B 2.1%
   1     3 smask     408   170  gray    1   8  image  no        13  0    90    90 7942B  11%
   1     4 image     408   180  rgb     3   8  image  no        14  0    90    90 5454B 2.5%
   1     5 smask     408   180  gray    1   8  image  no        14  0    90    90 9559B  13%
   1     6 image     408   180  rgb     3   8  image  no        15  0    90    90 4554B 2.1%
   1     7 smask     408   180  gray    1   8  image  no        15  0    90    90 8077B  11%
[... 993 more images ...]

对于非编程文档,根本没有图像。

答案 1 :(得分:1)

在这里的评论中看起来完整的答案:https://stackoverflow.com/a/12102852/1078529

诀窍是使用set_rasterization_zorder将某个zorder以下的所有内容光栅化为一个位图,

gca().set_rasterization_zorder(1)
plot(randn(100),randn(100,500),"k",alpha=0.03,zorder=0)
savefig("test.pdf",dpi=90)