在数据分析的过程中,往往需要对所建立的模型进行可视化,并调整其中的某些参数。

通常情况下,在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实现交互式绘图的更多相关文章

  1. Python3使用tkinter编写GUI程序

    目录 @(Python3中tkinter写的HTTP测试工具代码支持正则表达式和XPATH) 程序非常简单,暂时只支持GET方法,使用内置库tkinter编写GUI窗口,在Mac下运行效果图如下,wi ...

  2. 基于Python实现matplotlib中动态更新图片(交互式绘图)

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  3. Matplotlib模块:绘图和可视化

    一.简单介绍Matplotlib 1.Matplotlib是一个强大的Python绘图和数据可视化的工具包 2.安装方法:pip install matplotlib 3.引用方法:import ma ...

  4. Numpy使用Matplotlib实现可视化绘图

    Numpy使用Matplotlib实现可视化绘图 可以直接将Numpy的数组传给Matplotlib实现可视化绘图: 曲线图 饼图 柱状图 直方图 1. 绘制正弦曲线 2. 绘制饼图 3. 柱状图 4 ...

  5. 【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁   2011 ...

  6. opencv实现人脸识别(五) 运用tkinter进行GUI绘制 整合人脸识别模块

    因为之前学习过tkinter库,所以在学习了人脸识别模块的编写后, 打算绘制一个简单的GUI来应用人脸识别功能. 主界面如下所示: 签到打开在点开后直接进行人脸识别,如果成功则自动关闭视频窗口. 录入 ...

  7. tkinter的GUI设计:界面与逻辑分离(四)-- 与 matplotlib 结合

    有些场合,我们需要对数据可视化.单是靠 tkinter 难度太大,而且做出来的效果不一定理想. 此时,将 tkinter 与 matplotlib 结合,是最好的选择. 知识点: 将 tkinter ...

  8. 基于tkinter的GUI编程

    tkinter:tkinter是绑定了Python的TKGUI工具集,就是Python包装的Tcl代码,通过内嵌在Python解释器内部的Tcl解释器实现的,它是Python标准库的一部分,所以使用它 ...

  9. Python:Tkinter的GUI设计——物体实时移动

    参考: 1.Tkinter之Canvas篇 2.python GUI实践:做一个满图乱跑的小球 3.[Tkinter 教程08] Canvas 图形绘制 4.tkinter模块常用参数(python3 ...

随机推荐

  1. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-3 蒙特卡罗 (三)

    开学人倍忙,趁着第二周周末,我们继续图形相关的博客  Preface 今天我们来介绍一些理论方面的东西,为Monte Carlo 应用到我们的光线追踪器做铺垫 我们今天会介绍两章的东西,因为有一章内容 ...

  2. Python3基础系列——枚举类型大揭秘

    为什么使用枚举 枚举类型是定义常量的一种最优选择. 常量的广义概念是:不变化的量 对于常量的通俗比喻--如同大山不被轻而易举地改变 地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的 ...

  3. .net core 3.0中可以使用gRPC了

    今天发现.net core下有gRPC模板了,这个可是补全了.net core下高性能RPC框架缺失这一大短板了. 使用模板创建了工程后,发现连客户端的示例也创建了. 更加给力的是,IDE是能直接识别 ...

  4. Java项目收藏

    数据库 MyCat:数据库中间件 IM.消息推送 t-io:不仅仅是百万级即时通讯框架 tio-im:基于t-io写的IM,主要目标降低即时通讯门槛,实现多端不同协议间的消息发送如http.webso ...

  5. UIView的层次结构–code

    转:http://blog.dongliwei.cn/archives/uiview-tree-code // Recursively travel down the view tree, incre ...

  6. jquery异步ajax与服务器通信过程中如何通过then方法链式传递多层数据

    我们在有些地方可能需要对服务器返回的参数做多步处理,或者很多复杂的操作必须等到服务器返回结果之后才会执行,那么我们可以用链式调用的then方法让这里做到更加易于扩展,也更加容易分离出各个功能模块.基本 ...

  7. Java 下一代: 函数式编码风格——Groovy、Scala 和 Clojure 共享的函数结构及其优势

    原文地址 本文内容 命令式处理 函数式处理 函数式编程的优势 所有 Java 下一代语言都包括函数式编程结构,让您可以从一个更高的抽象层面来思考问题.然而,语言间术语的不同使得难以看到类似的结构.本期 ...

  8. C# System.IO.File

    using System; using System.IO; class Test { public static void Main() { string path = @"c:\temp ...

  9. 正则匹配报文中的XML(HTML)标签,替换重新输出

    调用返回报文标签中的存在中划线“-”,不符合规范,需要统一进行转换,但不能替换标签内的内容,利用正则匹配重新输出 /** * 正则匹配报文中的xml标签,将其中的"-"转换为&qu ...

  10. Spark 准备篇-环境搭建

    本章内容: 待整理 参考文献: 学习Spark——环境搭建(Mac版) <深入理解SPARK:核心思想与源码分析>(前言及第1章) 搭建Spark源码研读和代码调试的开发环境 Readin ...