Matplotlib调用savefig保存PDF时输出空白图片问题咨询
问题产生原因
核心原因有两个:
- 调用顺序错误:
plt.show()执行完成后,Matplotlib 会默认释放、清空当前绘图的figure对象,如果你是在plt.show()弹出窗口关闭之后,再执行plt.savefig('path.pdf'),此时操作的是一个全新的空白画布,导出的文件自然是空白的。 - 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
相关产品推荐
相关产品推荐

