将Matplotlib调整格式后的图形同时保存为PDF和PNG
引言
看似简单的操作,执行起来却遇到了很多问题,用savefig()保存时,不小心就保存了空白图形,还可能保存的图形格式错乱,有时还会报错。后来发现跟语句顺序关系很大。
我所使用的平台是VSCode,Python版本为3.6.0,Matplotlib版本为3.2.1
本文参考了解决使用 plt.savefig 保存图片时一片空白
保存PNG时的操作
在matplotlib.pyplot.show()
后调用matplotlib.pyplot.savefig('文件名.png')
会保存空白图形。需要先保存,后显示。
matplotlib.pyplot.savefig('文件名.png')
matplotlib.pyplot.show()
但先保存后显示会导致保存的图形没有了之前用figManager
所做的图形格式调整,保存的图形格式是错乱的。
figManager = matplotlib.pyplot.get_current_fig_manager()
figManager.resize(*figManager.window.maxsize())
matplotlib.pyplot.subplots_adjust(left=0.05, right=0.99, top=0.9, bottom=0.08, wspace=0, hspace=0.4)
需要先获取当前图形,再显示,最后保存。
fig = matplotlib.pyplot.gcf()
fig.show()
fig.savefig('文件名.png')
保存PDF时的操作
保存PDF也会有同样问题,操作思路是一样的,先获取当前图形,再显示,最后保存,但具体代码又有所不同。显示代码不能用fig.show()
,而是matplotlib.pyplot.show()
,不然保存后的pdf中图形格式会乱。
fig = matplotlib.pyplot.gcf()
matplotlib.pyplot.show()
fig.savefig('文件名.pdf')
同样,如果保存png过程中,显示语句调用matplotlib.pyplot.show()
也不行,会报错,必须用fig.show()
总结一下就是保存修改了显示格式的图形时,需要先获取当前图形,再显示图形,最后保存。保存PNG时用fig.show()
显示,保存PDF时用matplotlib.pyplot.show()
显示图形,二者不能混用。
同时保存PNG和PDF时的操作
需要依次调用fig.show()
和matplotlib.pyplot.show()
,调用顺序不能颠倒,每次调用显示函数后要立即保存为相应格式,不然会报错。以下代码语句顺序不能作任何调整。
fig = matplotlib.pyplot.gcf()
fig.show()
fig.savefig('文件名.png')
matplotlib.pyplot.show()
fig.savefig('文件名.pdf')
以下是我写的一个绘图文件,欢迎参考
https://github.com/dxbwar/covid19_TS1