如何在Tkinter应用中不使用pyplot保存Matplotlib图形?
解决方案:直接使用Figure实例的savefig方法
完全不需要依赖pyplot模块——你已经通过显式接口创建了Figure对象,这个对象本身就自带savefig方法,直接调用它就行,根本不用碰plt的任何函数。
举个简单的例子,假设你是这样创建Tkinter绑定的图形:
from matplotlib.figure import Figure from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg # 创建独立的Figure实例(不通过plt) fig = Figure(figsize=(5, 4), dpi=100) ax = fig.add_subplot(111) ax.plot([1,2,3], [4,5,1]) # 绑定到Tkinter画布 canvas = FigureCanvasTkAgg(fig, master=root) canvas.draw() canvas.get_tk_widget().pack()
要保存这个图形的时候,直接调用Figure对象的savefig:
# 直接保存,完全不涉及pyplot fig.savefig('my_plot.png')
为什么之前的方法会报错?
你用plt.figure(somefig)的时候,是试图把这个独立创建的Figure纳入pyplot的图形管理器,但你通过FigureCanvasTkAgg绑定的Figure根本没在pyplot的管理体系里,所以会抛出ValueError: The passed figure is not managed by pyplot。直接用Figure自己的方法就绕开了这个问题。
内容的提问来源于stack exchange,提问作者obachtos
相关产品推荐
相关产品推荐

