我试图在Tk窗口中绘制来自多个文件的数据。按照Tk的user_interfaces示例创建我的Figure()然后使用该图和我的根Tk窗口创建一个FigureCanvasTkAgg。如果我抓住我的图形的大小(使用get_size_inches或bbox.bounds),高度似乎正确,并匹配底层Tk画布的高度。但是,当窗口出现时,图形大约是底层Tk画布大小的一半,并且所有子图在该空间中被压扁在一起。我不能为我的生活弄清楚如何使图扩展到Tk画布的大小,或者甚至是图本身报告的大小。
更新 如果我将plt.subplots创建的plot_figure保存到png文件中,则它是' figsize'中指定的大小。当它显示时,它是用&t; Tk()'创建的根窗口的大小。而不是图形bbox或画布的大小。
这是基本代码:
#!/usr/bin/env python
from Tkinter import *
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
tk_root = Tk()
tk_root.wm_title("Embedding in Tk")
scrollbar = Scrollbar(tk_root)
scrollbar.pack(side=RIGHT, fill=Y)
plot_count = 0
plot_figure,ax = plt.subplots(len(gpx_files), 1, figsize=(12, 3 * len(gpx_files)))
plot_figure.tight_layout()
for axes in ax:
plt.sca(axes)
plot_count += 1
axes.plot(accum[20:-21], pace, linestyle="-")
axes.set_ylim(0,22)
axes.grid(True, which='major', axis='both')
canvas = FigureCanvasTkAgg(plot_figure, master=tk_root)
w,h = plot_figure.get_size_inches()
canvas.get_tk_widget().config(width=(12 * plot_figure.dpi), height=(h * (plot_figure.dpi)), bg='blue')
canvas.get_tk_widget().config(yscrollcommand=scrollbar.set)
canvas.get_tk_widget().config(scrollregion=(0,0, 12 * plot_figure.dpi, h * plot_figure.dpi))
scrollbar.config(command=canvas.get_tk_widget().yview)
canvas.show()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
mainloop()