一个简单的例子:
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)
产地:
但文件大小约为8Mb。有什么想法会出错吗?这可能是个错误吗?我使用的是Python 3.5.1和Matplotlib 2.1.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)