如何在 tkinter 中显示 matplotlib 图表

您所在的位置:网站首页 tkinter显示表格 如何在 tkinter 中显示 matplotlib 图表

如何在 tkinter 中显示 matplotlib 图表

2022-06-11 07:02| 来源: 网络整理| 查看: 265

我看到两个问题

首先:

您创建了 4 个画布 FigureCanvasTkAgg 并在每个画布上使用 add_subplot(222) 为 4 个图 (2x2) 创建位置,但您在每个画布中只使用一个位置。为此,您只能使用一张画布。

第二:

您需要 pack(fill="both",expand=True) 来调整绘图大小并使用窗口中的所有空间。

您还使用了 pack(side=tk.RIGHT),这可能会导致布局出现问题

最少的工作代码

import tkinter as tk import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.use("TkAgg") from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #from matplotlib.figure import Figure df1 = pd.DataFrame({ 'year': [2001,2002,2003],'value': [1,3,2],'personal': [9,1,5],}) df2 = pd.DataFrame({ 'year': [2001,}) # --- root = tk.Tk() figure = plt.Figure(figsize=(2,2),dpi=100) scatter = FigureCanvasTkAgg(figure,root) scatter.get_tk_widget().pack() #fill='both',expand=True) # --- ax1 = figure.add_subplot(221) ax1.plot(df1['year'],df1['personal'],color='red') ax1.legend(['']) ax1.set_xlabel('valeur de personals') ax1.set_title('ev de personal ') # --- ax2 = figure.add_subplot(222) ax2.plot(df2['year'],df2['value'],color='red') ax2.legend(['']) ax2.set_xlabel('valeur BSA') ax2.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- ax3 = figure.add_subplot(223) ax3.plot(df1['year'],color='red') ax3.legend(['']) ax3.set_xlabel('valeur de personals') ax3.set_title('ev de personal ') # --- ax4 = figure.add_subplot(224) ax4.plot(df2['year'],color='red') ax4.legend(['']) ax4.set_xlabel('valeur BSA') ax4.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- root.mainloop()

结果:

enter image description here

编辑:

与 4 个画布相同 - 每个画布仅使用 add_plot('111') 保留一个绘图 - 但这次我使用 grid() 而不是 pack() 来组织它。

它需要 columnconfigure、rowconfigure 来调整单元格大小并使用窗口中的所有空间。和 grid( ...,sticky='news') 将画布调整为单元格的大小。

import tkinter as tk import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.use("TkAgg") from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg #from matplotlib.figure import Figure df1 = pd.DataFrame({ 'year': [2001,}) # --- root = tk.Tk() # resize grid root.columnconfigure(0,weight=1) root.columnconfigure(1,weight=1) root.rowconfigure(0,weight=1) root.rowconfigure(1,weight=1) # --- figure1 = plt.Figure(figsize=(2,dpi=100) scatter1 = FigureCanvasTkAgg(figure1,root) scatter1.get_tk_widget().grid(row=0,column=0,sticky='news') #scatter1.get_tk_widget().pack(fill='both',expand=True) ax1 = figure1.add_subplot(111) ax1.plot(df1['year'],color='red') ax1.legend(['']) ax1.set_xlabel('valeur de personals') ax1.set_title('ev de personal ') # --- figure2 = plt.Figure(figsize=(2,dpi=100) scatter2 = FigureCanvasTkAgg(figure2,root) scatter2.get_tk_widget().grid(row=0,column=1,sticky='news') #scatter2.get_tk_widget().pack(side='right',fill='both',expand=True) ax2 = figure2.add_subplot(111) ax2.plot(df2['year'],color='red') ax2.legend(['']) ax2.set_xlabel('valeur BSA') ax2.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- figure3 = plt.Figure(figsize=(2,dpi=100) scatter3 = FigureCanvasTkAgg(figure3,root) scatter3.get_tk_widget().grid(row=1,sticky='news') #scatter3.get_tk_widget().pack(fill='both',expand=True) ax3 = figure3.add_subplot(111) ax3.plot(df1['year'],color='red') ax3.legend(['']) ax3.set_xlabel('valeur de personals') ax3.set_title('ev de personal ') # --- figure4 = plt.Figure(figsize=(2,dpi=100) scatter4 = FigureCanvasTkAgg(figure4,root) scatter4.get_tk_widget().grid(row=1,sticky='news') #scatter4.get_tk_widget().pack(fill='both',expand=True) ax4 = figure4.add_subplot(111) ax4.plot(df2['year'],color='red') ax4.legend(['']) ax4.set_xlabel('valeur BSA') ax4.set_title('Evolutiion des valeurs BSA depuis 1990 ') # --- root.mainloop()

结果:

现在绘图的边距更小。

enter image description here



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3