You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib如何导出矢量文字+栅格绘图的混合PDF文件?

Matplotlib导出混合矢量+栅格PDF的解决方案

Matplotlib原生支持对指定绘图内容做栅格化处理,同时保留文字、刻度、坐标轴等元素为矢量格式,可直接满足你的需求。

实现方法

你可以选择以下两种方案中的任意一种:

方案1:按图层优先级批量栅格化

  • 对使用了pcolormesh等高数据量绘图接口的坐标轴,设置set_rasterization_zorder阈值,所有zorder低于该阈值的元素都会被栅格化导出。
  • 绘图时将pcolormesh、imshow等需要栅格化的元素zorder设为低于阈值,文字、刻度等默认zorder高于阈值,会自动保留矢量格式。
  • 导出PDF时设置dpi参数控制栅格部分的清晰度,平衡体积和显示效果。

代码示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建3行2列画布
figure, axes = plt.subplots(nrows=3, ncols=2, figsize=(10, 15))

# 给第一个子图设置栅格化阈值:zorder < 0的元素自动栅格化
axes[0,0].set_rasterization_zorder(0)
# 绘制pcolormesh时设置zorder=-1,低于阈值,会被栅格化
test_data = np.random.randn(1000, 1000)
axes[0,0].pcolormesh(test_data, zorder=-1)

# 文字、标签、刻度默认zorder高于0,保留矢量格式
axes[0,0].set_xlabel('X轴标签')
axes[0,0].set_ylabel('Y轴标签')
axes[0,0].set_title('子图标题')

# 导出PDF,dpi设150-300即可满足绝大多数场景需求
figure.savefig('output.pdf', dpi=200, bbox_inches='tight')

方案2:指定单个图层栅格化

如果需要更灵活的控制,可以直接在绘图函数中加rasterized=True参数,强制当前绘图元素栅格化,不需要调整zorder:

# 直接指定pcolormesh图层栅格化
axes[0,0].pcolormesh(test_data, rasterized=True)

补充说明

  • 如果多个子图都用到高数据量绘图接口,给每个子图单独配置即可。
  • 最终导出的PDF中文字、刻度放大不会模糊,高数据量绘图内容被压缩为栅格嵌入,文件体积远小于全矢量导出的PDF。

内容的提问来源于stack exchange,提问作者dimitsev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:45:04