【原】使用Tkinter绘制GUI并结合Matplotlib实现交互式绘图
在数据分析的过程中,往往需要对所建立的模型进行可视化,并调整其中的某些参数。
通常情况下,在Python中可以通过Matplotlib来进行绘制图像。然而该绘制过程是静态的,也就是每次调整完参数需要重新调用绘图语句进行绘图展示。我们的目标是结合GUI组件,实现对模型参数的交互式绘图。这样,可以在展示出的GUI界面中动态的调整模型的参数,并绘制图像。
最终实现的效果如下:

可以通过GUI界面指定参数绘制散点图。
该过程需要结合Python的Tkinter库来进行GUI部分的实现。代码如下:
1: #!/usr/bin/env python
2: #coding:utf-8
3: """
4: Author: Chaos --<Chaosimpler@gmail.com>
5: Purpose: 修改Matplotlib的后端,实现在Tkinter的GUI绘制图像
6: Created: 2014-10-15
7: """
8: import numpy as np
9: from Tkinter import *
10: import matplotlib
11: from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
12: from matplotlib.figure import Figure
13:
14: #----------------------------------------------------------------------
15: def drawPic():
16: """
17: 获取GUI界面设置的参数,利用该参数绘制图片
18: """
19:
20: #获取GUI界面上的参数
21: try:sampleCount=int(inputEntry.get())
22: except:
23: sampleCount=50
24: print '请输入整数'
25: inputEntry.delete(0,END)
26: inputEntry.insert(0,'50')
27:
28: #清空图像,以使得前后两次绘制的图像不会重叠
29: drawPic.f.clf()
30: drawPic.a=drawPic.f.add_subplot(111)
31:
32: #在[0,100]范围内随机生成sampleCount个数据点
33: x=np.random.randint(0,100,size=sampleCount)
34: y=np.random.randint(0,100,size=sampleCount)
35: color=['b','r','y','g']
36:
37: #绘制这些随机点的散点图,颜色随机选取
38: drawPic.a.scatter(x,y,s=3,color=color[np.random.randint(len(color))])
39: drawPic.a.set_title('Demo: Draw N Random Dot')
40: drawPic.canvas.show()
41:
42:
43: if __name__ == '__main__':
44:
45: matplotlib.use('TkAgg')
46: root=Tk()
47:
48: #在Tk的GUI上放置一个画布,并用.grid()来调整布局
49: drawPic.f = Figure(figsize=(5,4), dpi=100)
50: drawPic.canvas = FigureCanvasTkAgg(drawPic.f, master=root)
51: drawPic.canvas.show()
52: drawPic.canvas.get_tk_widget().grid(row=0, columnspan=3)
53:
54: #放置标签、文本框和按钮等部件,并设置文本框的默认值和按钮的事件函数
55: Label(root,text='请输入样本数量:').grid(row=1,column=0)
56: inputEntry=Entry(root)
57: inputEntry.grid(row=1,column=1)
58: inputEntry.insert(0,'50')
59: Button(root,text='画图',command=drawPic).grid(row=1,column=2,columnspan=3)
60:
61: #启动事件循环
62: root.mainloop()
【原】使用Tkinter绘制GUI并结合Matplotlib实现交互式绘图的更多相关文章
- Python3使用tkinter编写GUI程序
目录 @(Python3中tkinter写的HTTP测试工具代码支持正则表达式和XPATH) 程序非常简单,暂时只支持GET方法,使用内置库tkinter编写GUI窗口,在Mac下运行效果图如下,wi ...
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...
- Matplotlib模块:绘图和可视化
一.简单介绍Matplotlib 1.Matplotlib是一个强大的Python绘图和数据可视化的工具包 2.安装方法:pip install matplotlib 3.引用方法:import ma ...
- Numpy使用Matplotlib实现可视化绘图
Numpy使用Matplotlib实现可视化绘图 可以直接将Numpy的数组传给Matplotlib实现可视化绘图: 曲线图 饼图 柱状图 直方图 1. 绘制正弦曲线 2. 绘制饼图 3. 柱状图 4 ...
- 【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁
摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁 2011 ...
- opencv实现人脸识别(五) 运用tkinter进行GUI绘制 整合人脸识别模块
因为之前学习过tkinter库,所以在学习了人脸识别模块的编写后, 打算绘制一个简单的GUI来应用人脸识别功能. 主界面如下所示: 签到打开在点开后直接进行人脸识别,如果成功则自动关闭视频窗口. 录入 ...
- tkinter的GUI设计:界面与逻辑分离(四)-- 与 matplotlib 结合
有些场合,我们需要对数据可视化.单是靠 tkinter 难度太大,而且做出来的效果不一定理想. 此时,将 tkinter 与 matplotlib 结合,是最好的选择. 知识点: 将 tkinter ...
- 基于tkinter的GUI编程
tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl解释器实现的,它是Python标准库的一部分,所以使用它 ...
- Python:Tkinter的GUI设计——物体实时移动
参考: 1.Tkinter之Canvas篇 2.python GUI实践:做一个满图乱跑的小球 3.[Tkinter 教程08] Canvas 图形绘制 4.tkinter模块常用参数(python3 ...
随机推荐
- win7 资源资源管理器访问FTP站点
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ftp] @="URL:File Transfer Protocol" ...
- RecylerView动画组件RecylerViewAnimators
RecylerView动画组件RecylerViewAnimators RecyclerView是比ListView和GridView更为强大的布局视图,可以用于展现大量的数据.RecylerVi ...
- 洛谷.3121.审查(AC自动机 链表)
题目链接 //删掉一个单词需要前移一段位置,用链表维护就好了 复杂度O(sum(len)) #include <cstdio> #include <cstring> #defi ...
- 潭州课堂25班:Ph201805201 第五课:格式化输出和深浅复制 (课堂笔记)
格式化输出和字符串转义 占位符 使用示意 作用 %s '%s %s' % ('hello', 'world') 表示占位的是str %d '%d %d' % (1, 2) 表示占位的是int %d ' ...
- Scrapy爬虫框架的安装
Scrapy框架是我在Windows中遇到的最难安装的第三方库,一直不想写这篇博客,但碰巧今天重装了系统,这正好是个机会? 1.安装pywin32:https://sourceforge.net/pr ...
- angular.js--------demo1
<!doctype html><html ng-app> <head> <meta charset="utf-8"> </he ...
- [模板][P3808]AC自动机(简单版)
Description: 求n个模式串中有几个在文本串中出现 Solution: 模板,详见代码: #include<bits/stdc++.h> using namespace std; ...
- String、StringBuffer、StringBulider
三者都实现了CharSequence接口,因此CharSequence可认为是一个字符串的协议接口 1.String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改 ...
- input输入框只能输入数字而且开头不能为零
<div class="input-choseNum"> <input type="number" id="inp-chooseNu ...
- AJAX异步传输——以php文件传输为例
此文档解决以下问题: 一.在当前html页面显示请求的数据1.get方式请求 ,不传递参数2.get方式请求 ,传递参数3.post方式请求 ,不传递参数4.post方式请求 ,传递参数 二.通过按 ...