我想将填充的轮廓图包含在pdf文档中(例如TeX文档)。
目前,我正在使用meta
s contourf
,并使用pyplot
s savefig
保存到pdf
。问题在于,与高分辨率pyplot
相比,图的大小变得相当大。
减小尺寸的一种方法当然是减少图中的水平数量,但是太少的水平会产生较差的情节。我正在寻找一种简单的方法,例如让绘图的颜色保存为png,轴,刻度等保存为矢量化。
答案 0 :(得分:7)
您可以使用Axes
选项set_rasterization_zorder
。
如果zorder
小于您设置的值,将保存为栅格化图形,即使保存为pdf
等矢量格式。
例如:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(500,500)
# fig1 will save the contourf as a vector
fig1,ax1 = plt.subplots(1)
ax1.contourf(data)
fig1.savefig('vector.pdf')
# fig2 will save the contourf as a raster
fig2,ax2 = plt.subplots(1)
ax2.contourf(data,zorder=-20)
ax2.set_rasterization_zorder(-10)
fig2.savefig('raster.pdf')
# Show the difference in file size. "os.stat().st_size" gives the file size in bytes.
print os.stat('vector.pdf').st_size
# 15998481
print os.stat('raster.pdf').st_size
# 1186334
您可以查看this matplotlib example了解更多背景信息。
正如@tcaswell指出的那样,只要一个艺术家光栅化而不必影响其zorder
,就可以使用.set_rasterized
。但是,这似乎不是contourf
的选项,因此您需要遍历PathCollections
和contourf
创建的set_rasterized
。 。像这样:
contours = ax.contourf(data)
for pathcoll in contours.collections:
pathcoll.set_rasterized(True)