小编典典

减小矢量轮廓图的大小

python

我想将填充的轮廓图包括到pdf文档(例如TeX文档)中。目前我使用pyplot小号contourf,并保存到pdfpyplot小号savefig。问题在于,与高分辨率相比,绘图的大小变得相当大png

减小大小的一种方法当然是减少地块中的层数,但是,层数太少则会导致地块变差。我正在寻找一种简单的方法,例如让绘图的颜色另存为png,并且将轴,刻度等保存为矢量。


阅读 128

收藏
2020-12-20

共1个答案

小编典典

您可以使用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

您可以看到此matplotlib示例以获取更多背景信息。


正如@tcaswell指出的那样,要光栅化一位艺术家而不必影响它zorder,可以使用.set_rasterized。但是,这似乎不是的选项contourf,因此您需要遍历每个对象上和上PathCollections创建的对象。像这样:contourf``set_rasterized

contours = ax.contourf(data)
for pathcoll in contours.collections:
    pathcoll.set_rasterized(True)
2020-12-20