【python】Tkinter嵌入Matplotlib绘图

0.引言

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

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

1.实现

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

图 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()
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值