基于matplotlib的可视化函数绘图计算器的实现

  • 前言
  • 设计实现
    • 分工设计
    • 目标功能
    • 实现过程
      • 1.用户界面设计
      • 2.表达式以LaTeX格式显示
      • 3.二维绘图
      • 4.三维绘图
      • 4.求解线性方程组
    • 特别说明!对matplotlib源代码做的改动
      • 改动1,_backend_tk.py
      • 改动2,backend_bases.py
    • 总结

前言

这是一次工程实训项目,项目组成员2人,设计时间十天,基于Python tkinter、matplotlib、numpy、sympy完成,功能略菜。
让我感觉唯一能吹的部分,就是为了程序的完美运行,我们修改了matplotlib的部分源代码。。。
源代码链接:下载链接

设计实现

分工设计

这个项目分为图形界面和业务逻辑2部分,由我和队友分工完成,我主要设计图形界面,队友设计业务逻辑,由于都是Python小白,在开发过程中遇了不少坑。

目标功能

  1. 可视化图形交互界面,实时显示标准数学表达式
  2. 输入合法的一元或二元函数解析式,绘制二维或三维函数图像
  3. 同时绘制多个函数图像
  4. 提供丰富的函数运算功能,包含但不限于三角函数,指数对数幂函数
  5. 求解线性方程组
  6. 友好的交互方式,包含但不限于任意拖动,缩放
  7. 对非法输入识别,并提示错误
  8. 保存已绘制的图形
  9. 求通项和,可视化表示
  10. 一元函数,多元函数求导运算并绘图
  11. 一元不定积分,二元不定积分运算并绘图
  12. 一元定积分,二元定积分运算

实现过程

1.用户界面设计

tkinter的按钮和文本框太丑了,我选用了tkinter里面的ttk,然后就是繁琐的代码,画按钮,画文本框,预留绘图区,这个部分没什么技术含量,就简要介绍,画完之后就是这个样子:

  1. 二维绘图界面,用于绘制二维图形,左边是matplotlib的绘图区,右边是用户操作界面,右上方留出以LaTeX格式显示方程式的位置
  2. 三维绘图界面,用于绘制三维图形,界面基本同上
  3. 解方程组,由于时间原因,这个界面做的略low,上方是以LaTeX格式显示的方程组及其解,下方是用户操作区

    界面的布局使用了place布局器,三个界面部分的UML如下面3幅图所示:


2.表达式以LaTeX格式显示

这是画的时间最多的部分,由于当时没学过编译原理,又不会Python分析LaTeX的库,所以就暴力考虑了能考虑的情况,代码及其冗杂,不挂出来了,最后的效果就是这样的:

  1. 常数
  2. 含未知量的表达式

  3. 求和式
  4. 求导式(为适应偏导,于是就写了偏导符号)
  5. 求极限式
  6. 求积分式
  7. 方程组

3.二维绘图

这是最激动人心的时刻了吧,我们构造了plot2D类和polt3D类用于绘制二维和三维图形,调用了Python的eval函数计算表达式,对特别的函数,诸如log的定义域问题做了考虑。
下面举几个二维绘图的例子:

  1. 多项式函数

  2. 指数函数、对数函数

  3. 三角函数

  4. 复合函数(采样率不高所以画的很迷。。。)

  5. 求导函数

  6. 求不定积分

    sin(x)的不定积分是-cos(x)+c,这里的c为0

  7. 求和以及求极限的结果都是常数,就不演示了

4.三维绘图

三维绘图的思路和二维绘图差不多,也是几个例子

  1. 多项式
  2. 复合函数
  3. 求偏导
  4. 求二重积分

4.求解线性方程组

  1. 首先需要输入未知数个数,点击OK,将自动生成3个待定方程,这里以3为例

  2. 依次输入系数和常数,以英文逗号分开,每输入一行,点击OK

  3. 全部输入完后将自动计算输出结果

特别说明!对matplotlib源代码做的改动

改动1,_backend_tk.py

…\Python_3.7.2\Lib\site-packages\matplotlib\backends_backend_tk.py
613,688行做了改动
613行处,将window = self.canvas.manager.window注释掉,换为window = self.window

    def set_cursor(self, cursor):# window = self.canvas.manager.windowwindow = self.windowwindow.configure(cursor=cursord[cursor])window.update_idletasks()

688行处,将master=self.canvas.manager.window注释掉,换为master=self.window

   fname = tkinter.filedialog.asksaveasfilename(# master=self.canvas.manager.windowmaster=self.window,title='Save the figure',filetypes=tk_filetypes,defaultextension=defaultextension,initialdir=initialdir,initialfile=initialfile,)

改动2,backend_bases.py

…\Python_3.7.2\Lib\site-packages\matplotlib\backend_bases.py 2640行做了改动,在2634行

self._button_pressed = None  # determined by the button pressed# at startself.mode = ''  # a mode string for the status barself.set_history_buttons()

这段代码下面,加上

        for i in range(1):self._active = 'PAN'self._idPress = self.canvas.mpl_disconnect(self._idPress)self.mode = ''self._idRelease = self.canvas.mpl_disconnect(self._idRelease)self._idPress = self.canvas.mpl_connect('button_press_event', self.press_pan)self._idRelease = self.canvas.mpl_connect('button_release_event', self.release_pan)self.mode = 'pan/zoom'self.canvas.widgetlock(self)for a in self.canvas.figure.get_axes():a.set_navigate_mode(self._active)self.set_message(self.mode)

直至函数结束
由于时间久远,不修改导致的问题我已记不清,请下载源码后研究

总结

在此次专业实训中,我们进行了多功能可视化函数计算器项目的开发,我收获颇丰,极大提高了自己的实践能力,协调能力和沟通能力等,对自己2年以来的学习有了更深的体会和理解。
在此次项目里,我主要负责了软件界面的设计,构造了二维绘图,三维绘图,方程求解3个界面框架,详细研究了Python tkinter图形库各控件的使用,tkinter消息响应,界面布局,界面美化,实现了从0开始学Python,以迭代方式不断优化界面设计,添加新的功能,前后端数据交互,并同队友实现了tkinter Frame组件与matplotlib绘图功能的对接,matplotlib源代码的修改,LaTeX表达式的正确显示等功能。
此次专业实训我受益匪浅,完成了自己对Python编程语言的初步学习,了解了Python基本语法,了解了tkinter和ttk图形库的使用,见识到了sympy,numpy,matplotlib等数学库绘图库的强大功能,领略到了Python语言进行科学计算的无穷魅力,同时也锻炼了自己的实践能力,积累了调试程序,测试优化代码的经验,讲学到的知识应用到实践中去。

[Python]可视化函数绘图计算器相关推荐

  1. Python可视化——3D绘图解决方案pyecharts、matplotlib、openpyxl

    Python可视化--3D绘图解决方案pyecharts.matplotlib.openpyxl 1. pyecharts 2. matplotlib 3. openpyxl 这篇博客将介绍pytho ...

  2. qpython3绘图_比Excel制图更强大,Python可视化工具Altair入门教程

    比 Excel 制图更强大,Python 可视化工具 Altair 入门教程 数据转化成更直观的图片,对于理解数据背后的真相很有帮助.如果你有这方面的需求,而且还在使用 Python,那么强烈推荐你试 ...

  3. python可视化之matplotlib绘图--蜘蛛侠钢铁侠(组合分区绘图)

    matplotlib绘图–本次图形涉及(并列)条形图.(堆积)柱状图.饼图.折线图.阶梯图.散点图.极线图.气泡图: 子区划分:subplots().gridspec().add_axes(). py ...

  4. python使用matplotlib可视化函数曲线、设置y轴为对数坐标(log scale)、默认情况下坐标轴为线性坐标

    python使用matplotlib可视化函数曲线.设置y轴为对数坐标(log scale).默认情况下坐标轴为线性坐标 目录

  5. python绘图实例-Python matplotlib基础绘图函数示例

    原标题:Python matplotlib基础绘图函数示例 Pyplot基础图标函数: 函数 说明 plt.plot(x,y,fmt,-) 绘制一个坐标图 plt.boxplot(data,notch ...

  6. 2021-04-28 Python可视化图表生成-Matplotlib绘图

    Python可视化图表生成-Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib 安装 pip ins ...

  7. python绘制函数曲线x2sin(x2-x-2)_Python数据处理从零开始----第四章(可视化)(2)图形和轴...

    正文 导入包 当我们需要对数据进行可视化时,我们遇到的可能最简单的是单个函数的可视化y = f(x)y = f(x). 在这里,我们将首先看一下这种类型的简单绘图.第一步先导入包:% reset -f ...

  8. python text函数_python可视化text()函数使用详解

    python可视化text()函数使用详解 这篇文章主要介绍了python可视化text()函数使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考 ...

  9. Python 函数绘图及函数图像微分与积分

    Python 函数绘图及函数图像微分与积分 前言 在学校太闲,就写了这个程序,可以绘制函数图像,并且可以绘制其导函数图像和不定积分的图像,效果非常不错. 效果图 说明 1,程序无法绘制复数图像,若函数 ...

最新文章

  1. Fedora 24 Alpha带着Gnome 3.20姗姗来迟
  2. SaltStack 学习笔记 - 第十一篇: SaltStack 文件操作
  3. StringUtils详解
  4. js json对象转字符串_Mock.js模拟数据实现前端独立开发
  5. 云原生 DevOps 的 5 步升级路径
  6. Linux系统调用在glibc中的实现
  7. 实现.Net程序中OpenTracing采样和上报配置的自动更新
  8. 【C++ Priemr | 15】构造函数与拷贝控制
  9. 00030_ArrayList集合
  10. owncloud8 php,owncloud-8.2.3
  11. Android Service使用需要注意事项
  12. oracle 关系 表 视图_在Oracle数据库中,表和视图的区别与联系
  13. 步进电机应用c语言程序设计实例,步进电机C语言程序.doc
  14. 易掌管-计件工资系统免费登记派送中
  15. JBOSS启动错误:Not pointing to a directory
  16. win10最简单定时关机命令
  17. Python pyecharts Geo函数的应用
  18. javascript百炼成仙 第一章 掌握JavaScript基础1.3变量的声明
  19. 试试基础的Spring Boot的面试题?(第一波)
  20. 世界数字图书馆开通中文浏览

热门文章

  1. Django的下载安装
  2. redisTemplate执行lua脚本
  3. WEB前端 网页设计 简介
  4. 【经典面试题】strcmp 函数的实现
  5. dcu故障是哪_【车匠在线-故障案例】潍柴自主DCU通讯故障
  6. Gradle 下载依赖失败解决方法
  7. 使用python自动提交调查问卷
  8. Opengl使用手册 | 图形学快速入门
  9. sdutacm-cyk追楠神系列一
  10. 计算机应用多媒体设计,2020年计算机软件水平考试《多媒体应用设计师》问答题及参考答案...