Изменение размера рисунка Pyplot при изменении размера окна - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь настроить рисунок matplotlib.pyplot в соответствии с размером окна при использовании сетки. Моя первая попытка состояла в том, чтобы установить вес с помощью columnconfigure, которое позволяло увеличивать масштаб только до точки, после которой фигура не стала бы больше. Тем не менее, он изменился правильно при уменьшении размера окна.

root.columnconfigure(0, weight=1)

Следующей попыткой было получить размер окна, преобразовать его в пиксели и использовать set_size_inches

self.fig_sig.set_size_inches(x_scaled,y_scaled)
self.fig_sig.canvas.draw()

Однако на самом деле он не меняет размер.

Ниже приведен исполняемый код, который я использовал для тестирования.

import tkinter as tk 
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

class MyApp(tk.Frame):
    def __init__(self, master = None):
        self.new_window() 
        tk.Frame.__init__(self, master) 
        self.counter = []

    def new_window(self):
        root.bind("<Configure>", self.resize) 
        root.columnconfigure(0, weight=1)
        root.columnconfigure(1, weight=1)
        root.columnconfigure(2, weight=1)
        root.rowconfigure(1, weight=1)

        self.fig_sig = plt.figure()
        graph = self.fig_sig.add_subplot(111)
        x_werte = [0,1,2,3,4,5]
        y_werte = [0, 2, 4, 6, 8, 10]
        graph.plot(x_werte, y_werte)

        canvas = FigureCanvasTkAgg(self.fig_sig, master=root)
        canvas_widget=canvas.get_tk_widget()   
        canvas_widget.grid(row = 1, column = 0, columnspan = 3) 
        canvas.draw()
    def resize(self, event):
        x_scaled = event.width/96
        y_scaled = event.height/96 -2       
        self.fig_sig.set_size_inches(x_scaled,y_scaled)
        self.fig_sig.canvas.draw()
        print("resized to", x_scaled, y_scaled)
if __name__=="__main__":
    root = tk.Tk()
    myapp = MyApp(master = root)
    myapp.mainloop()    

Хотя это не первый вопрос, касающийся изменения размера с помощью matplotlib, до сих пор я не смог найти ни одного из предложенных способов работы. .

С уважением

...