【python】Tkinter嵌入Matplotlib绘图

0.引言

Matplotlib是Python语言及其数值计算库NumPy的绘图库。它提供了一个物件导向的API,可以将绘图嵌入到使用通用GUI工具包(如Tkinter、wxPython、Qt或GTK)的程序中。
如何在Tkinter应用中嵌入Matplotlib绘图?
【python】Tkinter嵌入Matplotlib绘图_第1张图片

图 1 Tkinter应用中嵌入Matplotlib绘图实例

1.实现

在Tkinter中嵌入Matplotlib绘图的关键两个类:FigureCanvasTkAggNavigationToolbar2Tk
Matplotlib 为我们提供了几个类,允许将 Matplotlib 图形和绘图功能集成到Tkinter GUI中。其中一个类是FigureCanvasTkAgg,它是一种特殊的画布,可以在其上绘制 Matplotlib 图形,并且它 也可以作为常规 Tkinter 小部件插入到 Tkinter GUI 中。
而NavigationToolbar2Tk类用于添加导航工具栏,提供了与图形交互的有用功能,例如Zoom in、Zoom out、Save Graph等,如果不需要导航工具栏,可不使用NavigationToolbar2Tk类。
【python】Tkinter嵌入Matplotlib绘图_第2张图片

图 2 不使用NavigationToolbar2Tk类添加导航栏效果

Figure类

Figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

  • num:图像编号或名称,数字为编号 ,字符串为名称
  • figsize:指定figure的宽和高,单位为英寸;
  • dpi:参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
  • facecolor:背景颜色
  • edgecolor:边框颜色
  • frameon:是否显示边框

FigureCanvasTkAgg类

Matplotlib 有一个称为backends的特殊模块,其中包含用于与 Tkinter 等其他流行库集成的各种子模块。Tkinter 的后端库称为backend_tkagg,它包含可用于 Matplotlib 和 Tkinter 集成的各种类。这是我们将从中导入FigureCanvasTkAgg 的地方。
该类的第一个参数FigureCanvasTkAgg()是 Matplotlib 图对象,第二个参数是 Tkinter 应用程序的根对象。

import tkinter as tk
import matplotlib

matplotlib.use('TkAgg')
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg,
    NavigationToolbar2Tk
)

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Tkinter Matplotlib Demo')
        # prepare data
        data = {
            'Python': 11.27,
            'C': 11.16,
            'Java': 10.46,
            'C++': 7.5,
            'C#': 5.26
        }
        languages = data.keys()
        popularity = data.values()

        # 步骤1:创建一个图对象
        figure = Figure(figsize=(6, 4), dpi=100)

        # 步骤2:创建FigureCanvasTkAgg 对象,添加一个画布figure_canvas 
        figure_canvas = FigureCanvasTkAgg(figure, self)

        # 添加导航工具栏,必须要先创建FigureCanvasTkAgg 对象(非必须)
        NavigationToolbar2Tk(figure_canvas, self)

        # 步骤3:创建子图 axes 坐标轴
        axes = figure.add_subplot()

        # 步骤4:绘图,创建直方图
        axes.bar(languages, popularity)
        axes.set_title('Top 5 Programming Languages')
        axes.set_ylabel('Popularity')
		
		#步骤5:画布布局,嵌入Tkinter
        figure_canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

if __name__ == '__main__':
    app = App()
    app.mainloop()

你可能感兴趣的:(python,python,matplotlib,开发语言)