首页 > 解决方案 > Python:如何使带有子图的 Matplotlib 图形扩展以填充其上的整个 FigureCanvasTkAgg?

问题描述

我正在制作一个 Tkinter GUI,我正在尝试为它获取视觉效果。我想在滚动画布上绘制一些 seaborn 图表,以便可以正确调整图表的大小。我使用 matplotlib.pyplot.subplots 制作了一个图形和一个轴列表,然后将它放在一个我附加两个滚动条的 FigureCanvasTkAgg 上。我可以在整个画布上滚动,但图形仍保留在画布的一小部分。

如何让图形占据画布的整个区域,然后滚动到不同的部分?

基本上我希望在这里实现输出:Matplotlib 上的滚动条显示页面

但不是使用 Tkinter 的 PyQt。

import sys

import tkinter as tk
from tkinter import ttk

import matplotlib
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
matplotlib.use("TkAgg")

from matplotlib import style
style.use("ggplot")


plt.rcParams.update({'font.size': 12})


root = tk.Tk()

# frame = ttk.Frame(root)
# frame.pack(expand = True)



combMapFig, combMapAxes = plt.subplots(nrows = 5, ncols = 10, figsize = (100,100), dpi = 100)
    # axes_list = axes.flatten()
    # axes_list = axes_list.tolist()
combMapAxes = combMapAxes.tolist()


# plt.gca().set_position([0,0,1,1])


mapCanvas = FigureCanvasTkAgg(combMapFig, root)
mapCanvas.draw()



mapXScroll = tk.Scrollbar(root, orient = 'horizontal')
mapXScroll.config(command = mapCanvas.get_tk_widget().xview)
mapXScroll.pack(side = tk.BOTTOM, fill = tk.X, expand = tk.FALSE)
  
mapYScroll = tk.Scrollbar(root)
mapYScroll.config(command = mapCanvas.get_tk_widget().yview)
mapYScroll.pack(side = tk.RIGHT, fill = tk.Y, expand = tk.FALSE)
  
mapCanvas.get_tk_widget().config(yscrollcommand = mapYScroll.set)
mapCanvas.get_tk_widget().config(xscrollcommand = mapXScroll.set)
  
#             mapCanvas.get_tk_widget().config(scrollregion = mapCanvas.get_tk_widget().bbox("all"))
mapCanvas.get_tk_widget().config(width = 500, height = 500)
mapCanvas.get_tk_widget().config(scrollregion = (0,0, 5000,5000))


mapCanvas.get_tk_widget().pack(side = tk.LEFT, expand = True, fill = tk.BOTH)
mapCanvas._tkcanvas.pack(side = tk.LEFT, expand = True, fill = tk.BOTH)





root.rowconfigure(0, weight = 1)
root.columnconfigure(0, weight = 1)


try:
    root.mainloop()
except KeyboardInterrupt as e:
    sys.exit("Keyboard Interrupt. Program Closed")

电流输出

图形应扩展到的空白画布

谢谢

标签: pythonmatplotlibtkinterseaborn

解决方案


推荐阅读