plt.savefig保存空白图求助:绘制的图表无法正常保存
解决Matplotlib保存图片空白的问题
你的代码存在两个核心问题,直接导致保存的图片显示空白:
1. 错误创建了全新的空白画布
代码末尾执行的fig=plt.figure()会生成一个空的新画布,后续调用fig.savefig()保存的是这个空白画布,而非你之前绘制好的图表。
2. 未正确初始化坐标轴对象ax
代码开头仅创建了画布,但未关联对应的坐标轴,直接使用ax.bar会引发错误(若此前未定义ax),需要将画布与坐标轴绑定。
修改后的完整代码
# 同时创建画布和坐标轴,指定尺寸 fig, ax = plt.subplots(figsize=(20,5)) Bar_Target_Gen = ax.bar(0, Target_Gen, color='#00BA00', label='Target Gen.', width=0.5) Bar_Gen_Energy = ax.bar(0, Gen_Energy, color='#DBFF1F', label='Gen. Energy', width=0.4) Bar_E_Loss = ax.bar(0, E_Loss, color='#A9B3A9', label='E. Loss', bottom=Gen_Energy, width=0.4) Bar_Theor_Energy = ax.bar(0, Theor_Energy, color=(0, 0, 0, 0), edgecolor='black', linestyle='dotted', width=0.5, linewidth=1.5, label='Theor. Energy') ax.text(0, Target_Gen, '%d' % Target_Gen + ' MWh', ha='center', va='top', fontsize=20, color='#FFFFFF', fontweight='semibold') ax.text(0, 30, '%d' % Gen_Energy + ' MWh', ha='center', va='top', fontsize=20, color='#FFFFFF', fontweight='semibold') ax.text(0, Theor_Energy, '%d' % Theor_Energy + ' MWh', ha='center', va='bottom', fontsize=16, color='Black', fontweight='semibold') ax.set_xticks([]) ax.legend(loc='upper right', bbox_to_anchor=(1.33, 1)) # 保存绘制完成的目标画布,bbox_inches='tight'避免图例被裁剪 fig.savefig('input/grafico.jpg', dpi=100, bbox_inches='tight') plt.show()
额外注意事项
- 必须先执行
savefig再调用plt.show(),因为plt.show()会释放画布资源,后续保存会得到空白图。 - 添加
bbox_inches='tight'参数,可防止图例超出图片范围被裁剪。
内容的提问来源于stack exchange,提问作者Damian Fabricio Márquez
相关产品推荐
相关产品推荐

