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

Matplotlib调用savefig保存PDF时输出空白图片问题咨询

问题产生原因

核心原因有两个:

  1. 调用顺序错误:plt.show() 执行完成后,Matplotlib 会默认释放、清空当前绘图的figure对象,如果你是在plt.show()弹出窗口关闭之后,再执行plt.savefig('path.pdf'),此时操作的是一个全新的空白画布,导出的文件自然是空白的。
  2. zorder设置异常:你给中心嵌入的图片设置了zorder=-10,部分版本的Matplotlib在导出PDF矢量格式时,会将zorder小于0的元素判定为画布背景层下方的内容,直接不做渲染,也会导致内容缺失。
修复方法

按照以下步骤调整代码即可:

  • 调整函数调用顺序:必须先执行保存操作,再调用plt.show(),避免画布被提前清空。
  • 修改中心图片的层级参数:将嵌入图片的zorder从-10改为大于0的数值(比如1),保证图片在画布可视层级内。
  • (可选)保存时添加bbox_inches='tight'参数,避免左侧的图例因为超出默认画布范围被裁剪。

调整后的关键代码段参考:

im = plt.imread('chicken.jpg', format='jpg')
# 把zorder从-10修改为1,保证图片在可视层级
imagebox = OffsetImage(im, zoom=0.25,zorder=1)
ab = AnnotationBbox(imagebox, (0,0), xycoords='data', pad=0, frameon=False)
fig.gca().add_artist(ab) 

ax.legend(wedges, labels2,
          title="Feed Mill Breakdown",
          loc="center left",
          bbox_to_anchor=(-0.5, 0, 0.5, 1))

# 先执行保存,再弹出窗口展示
plt.savefig('path.pdf', bbox_inches='tight')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:57:11