Python数据可视化(五)

实现GUI效果

借助 matplotlib,除可以绘制动画内容外,还可以实现用户图形界面的效果,也就是 GUI 效果。 GUI是用户使用界面的英文单词首字母的缩写。接下来,我们就以模块widgets中的类RadioButtons、 Cursor 和 CheckButtons 的使用方法为例,详细讲解实现 GUI 效果的思路和方法。

 

一,类 RadioButtons 的使用方法

通过调用类 RadioButtons,可以在画布中添加具备选择功能的收音机按钮,实现类似网页项目 栏中的单击按钮的体验效果,就如同按下收音机的功能按钮一般,进而通过按下按钮的操作过程, 最终实现绘制内容的改变。

1.代码示例

import matplotlib.pyplot as plt
import numpy as npfrom matplotlib.widgets import RadioButtonsx = np.linspace(0.0, 2.0, 1000)
y1 = 1.5 * np.cos(2 * np.pi * x)
y2 = 1.0 * np.cos(2 * np.pi * x)
y3 = 0.8 * np.cos(2 * np.pi * x)fig, ax = plt.subplots(1, 1)
line, = ax.plot(x, y1, color="red", lw=2)
plt.subplots_adjust(left=0.35)axesbgcolor = "cornflowerblue"# a set of radionbuttons about amplitude
ax1 = plt.axes([0.1, 0.7, 0.15, 0.15], facecolor=axesbgcolor)
radio1 = RadioButtons(ax1, ("1.5 A", "1.0 A", "0.8 A"))def amplitudefunc(label):hzdict = {"1.5 A": y1, "1.0 A": y2, "0.8 A": y3}ydata = hzdict[label]line.set_ydata(ydata)plt.draw()radio1.on_clicked(amplitudefunc)# a set of radiobuttons about color
ax2 = plt.axes([0.1, 0.4, 0.15, 0.15], facecolor=axesbgcolor)
radio2 = RadioButtons(ax2, ("red", "green", "orange"))def colorfunc(label):line.set_color(label)plt.draw()radio2.on_clicked(colorfunc)# a set of radionbuttons about linestyle
ax3 = plt.axes([0.1, 0.1, 0.15, 0.15], facecolor=axesbgcolor)
radio3 = RadioButtons(ax3, ("-", "--", "-.", ":"))def linestylefunc(label):line.set_linestyle(label)plt.draw()radio3.on_clicked(linestylefunc)plt.show()

 

 

2.代码解释 

<1>在 GUI 效果的实现过程中,通过调用“from matplotlib.widgets import RadioButtons”语句, 从模块 widgets 中导入类 RadioButtons,实现向画布中添加按钮的关键一步。

<2>在添加第一组振幅按钮的过程中,首先向画布中添加一个坐标轴实例 ax1,这是一个长度 和高度都归一化到 0~1 之间的正方形坐标轴,距离画布左边缘和底部分别是画布长度的 10%和高度 的 70%,下面需要添加的收音机按钮就会被放置在这个坐标轴内部。

<3>接着向类 RadioButtons 的构造函数中传递坐标轴实例 ax1 和按钮的标签内容,目的是向坐 标轴中添加指定振幅大小的收音机按钮。

<4>定义振幅函数 amplitudefunc(),在该函数中,调用函数 draw()更新单击了相应按钮后的画 布内容。函数 draw()一般使用在交互模式下的画布内容的更新操作的过程里。

<5>调用实例方法 on_clicked(),在振幅按钮被单击时,就会将振幅按钮的文本标签内容作为 参数值传入函数 amplitudefunc()中,最终实现振幅函数 amplitudefunc()的调用目标。也就是说,实 例方法将按钮的标签内容与振幅函数联系起来,从而实现单击不同的按钮出现相应振幅的图形的 GUI 效果。

<6>在第二组颜色按钮的制作过程中,除添加坐标轴实例 ax2 和生成颜色按钮实例 RadioButtons 外,主要借助函数 colorfunc()完成颜色按钮功能的设置工作,也就是通过实例方法 on_clicked()将颜 色按钮功能赋予颜色文本标签内容,从而实现单击不同的颜色按钮出现不同颜色的线条的 GUI 效果。

<7>对于第三组线条风格按钮的设置思路和方法与前两组完全相同,实现方法的关键就是定义函数 linestylefunc()及调用实例方法 on_clicked(),这里就不再逐一进行相关内容的讲解了。 

二,类 Cursor 的使用方法

通过使用类 Cursor,可以向图形中添加一组横纵交叉的直线,从而实现图形界面中任何位置的数 值定位的可视化效果。从某种意义上来讲,这种横纵交叉线又很像数值放大镜,可以清楚地显示任何 位置的坐标数值。在金融行业里,我们会非常频繁和适宜地使用交叉线来窥探数据的规律和特点。

1.代码示例

import matplotlib.pyplot as plt
import numpy as npfrom matplotlib.widgets import Cursorlineprops = dict(color="red", lw=2)fig, ax = plt.subplots(1, 1, subplot_kw=dict(facecolor="lemonchiffon"))x = np.random.random(100)
y = np.random.random(100)
ax.scatter(x, y, marker="o")
ax.set_xlim(-0.02, 1.02)
ax.set_ylim(-0.02, 1.02)cursor = Cursor(ax, useblit=True, **lineprops)plt.show()

 

 

2.代码解释 

<1>通过调用“from matplotlib.widgets import Cursor”语句,实现类 Cursor 的导入工作。通过绘制散点图,实现横纵交叉线的显示对象的展示工作。

<2>调用“Cursor(ax,useblit=True,**lineprops)”语句,实现横纵交叉线的展示需求。同时,使用参数 lineprops 设置横纵交叉线的线条颜色和线条宽度等属性特征。

 

三,类 CheckButtons 的使用方法

1.代码示例

import matplotlib.pyplot as plt
import numpy as npfrom matplotlib.widgets import CheckButtonsx = np.linspace(0.0, 2.0, 1000)
y1 = 1.2 * np.cos(2 * np.pi * x)
y2 = 1.0 * np.cos(2 * np.pi * x)
y3 = 0.8 * np.cos(2 * np.pi * x)fig, ax = plt.subplots(1, 1)
line1, = ax.plot(x, y1, color="red", lw=2, visible=False, label="1.2 A")
line2, = ax.plot(x, y2, color="green", lw=2, label="1.0 A")
line3, = ax.plot(x, y3, color="orange", lw=2, label="0.8 A")
plt.subplots_adjust(left=0.30)facecolor = "cornflowerblue"cax = plt.axes([0.1, 0.4, 0.1, 0.15], facecolor=facecolor)lines = [line1, line2, line3]labels = [str(line.get_label()) for line in lines]
visibility = [line.get_visible() for line in lines]
check = CheckButtons(cax, labels, visibility)def func(label):index = labels.index(label)lines[index].set_visible(not lines[index].get_visible())plt.draw()check.on_clicked(func)plt.show()

 

 

 

2.代码解释

我们绘制 3 条曲线,它们的颜色分别是红色、绿色和橘黄色,其中曲线颜色是红色的线条不 显示。

<1>向画布中添加一个坐标轴,得到坐标轴实例 cax。接下来,我们会向这个坐标轴上放置点 选按钮。

<2>通过推导列表分别获得曲线的标签列表 labels 和可见情况列表 visibility。

<3>调用类 CheckButtons 获得实例 check,在这个过程中,会将坐标轴实例 cax、标签列表 labels 和可见情况列表 visibility 作为参数值传入类 CheckButtons 的构造函数中。

<4>定义一个函数 func(),这个函数主要实现两个功能:其一是将点选按钮与曲线的可见情况 进行关联,这个功能是通过实例方法 set_visible()来完成的,最主要的是实例方法“set_visible(not lines[index].get_visible())”中的“not”关键字;其二是通过调用函数 draw()将点选后的画布内容进 行更新,以显示出点选后的绘图内容。

<5>调用实例方法 on_clicked()将点选动作和曲线显示联系起来,完成点选不同选项按钮出现相 应曲线的GUI效果的工作目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wpf 使用 Prism 实战开发Day25

首页待办事项及备忘录添加功能 一.修改待办事项和备忘录逻辑处理类,即AddMemoViewModel和AddTodoViewModel 1.AddMemoViewModel 逻辑处理类&#xff0c;添加View视图数据要绑定的实体类 Model public class AddMemoViewModel :BindableBase,IDialogHostAware{public AddMemoV…

【B站 heima】小兔鲜Vue3 项目学习笔记Day03

文章目录 Home1.Home整体结构搭建和分类实现2. banner轮播图功能3. Home 面板组件封装4.新鲜好物和人气推荐实现5. 图片懒加载指令实现6. Home- product产品列表实现7. Home-GoodsItem 组件封装 一级路由1. 整体认识和路由配置2. 面包屑导航3. 一级分类 - 轮播图的实现4. 激活状…

基于Pytorch框架的深度学习EfficientNet神经网络香蕉水果成熟度识别分类系统源码

第一步&#xff1a;准备数据 4种香蕉水果成熟度数据&#xff1a;overripe&#xff0c;ripe&#xff0c;rotten&#xff0c;unripe&#xff08;过熟、熟、烂、未成熟&#xff09;&#xff0c;总共有13474张图片&#xff0c;每个文件夹单独放一种成熟度数据 第二步&#xff1a;搭…

ZEDmini使用完全指南

ZEDmini使用 ZED stereolabs 开箱测评 使用说明 ubuntu18.04nvidiacuda10 ubuntu18.04ZED SDK安装和使用 Ubuntu16.04安装NVIDIA显卡驱动 查看显卡信息 redwallredwall-G3-3500:~/catkin_ws$ lspci | grep VGA 00:02.0 VGA compatible controller: Intel Corporation Device …

sourcetree推送到git上面

官网&#xff1a;Sourcetree | Free Git GUI for Mac and Windows 下载到1次提交 下载后打开 点击跳过 下一步 名字邮箱 点击clone 把自己要上传的代码粘贴到里面去 返回点击远程->点击暂存所有 加载完毕后&#xff0c;输入提交内容提交 提交完成了 2次提交 把文件夹内的…

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 &#xff08;1&#xff09;面向机器语言 计算机处理信息的早期语言是所谓的机器语言&#xff0c;使用机器语言进行程序设计需要面向机器来编写代码&#xff0c;即需要针对不同的机器编写诸如0101 1100这样的指令序列。 &#xff08;2&#x…

【JavaScript】文件下载

文件下载的消息格式 服务器只要在响应头中加入 Content-Disposition: attachment; filename"kxx" 即可触发浏览器的下载功能其中&#xff1a; attachment 表示附件&#xff0c;浏览器看到此字段&#xff0c;触发下载行为&#xff08;不同的浏览器下载行为有所区别&…

【二叉树】力扣OJ题

文章目录 前言1. 翻转二叉树1.1 题目1.2 解题思路1.3 代码实现1.4 时空复杂度 2. 对称二叉树2.1 题目2.2 解题思路2.3 代码实现2.4 时空复杂度 3. 平衡二叉树3.1 题目3.2 解题思路3.3 代码实现3.4 时空复杂度 结语 前言 本篇博客主要介绍二叉树的经典 OJ 题&#xff0c;题目主…

MyBatis详细教程!!(入门版)

目录 什么是MyBatis&#xff1f; MyBatis入门 1&#xff09;创建工程 2&#xff09;数据准备 3&#xff09;配置数据库连接字符串 4&#xff09;写持久层代码 5&#xff09;生成测试类 MyBatis打印日志 传递参数 MyBatis的增、删、改 增&#xff08;Insert&#xff0…

有什么普通人可以做的赚钱软件?盘点9个适合普通人长期做的软件

在这个互联网高速发展的时代&#xff0c;智能手机已经成为我们生活中不可分割的一部分。众多APP的涌现&#xff0c;使得许多朋友都在寻求通过手机赚钱的方法。 然而&#xff0c;面对市面上琳琅满目的网上赚钱APP&#xff0c;我们该如何挑选呢&#xff1f;别担心&#xff0c;今…

功率电感设计方法2:实例

文章目录 1&#xff1a;美磁的选项手册截图2&#xff1a;设计步骤2.1&#xff1a;设计需求2.2:选择磁芯材料2.3&#xff1a;选择磁芯2.4 查询 A L A_{L} AL​自感系数2.5 初算匝数2.6重新校准验算感量 3&#xff1a;后续 绕线因子4&#xff1a;日常壁纸分享 参考手册链接 1&…

普通人转行程序员,最大的困难是找不到就业方向

来百度APP畅享高清图片 大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站也叫这个名。 我自己是法学院毕业后&#xff0c;通过2年的努力才转行程序员成功的。[吃瓜R] 我发现对于一个外行来说&#xff0c;找不到一个适合自己的方向&#xff0c;光靠努力在一个新的行业里…

使用Java 将字节数组转成16进制的形式

概述 在很多场景下&#xff0c;需要进行分析字节数据&#xff0c;但是我们存起来的字节数据一般都是二进制的&#xff0c;这时候就需要我们将其转成16进制的方式方便分析。比如在做音视频的时候&#xff0c;需要看下我们传输的视频h264数据中是否有对应的I帧或者B帧等数据&…

07、SpringBoot 源码分析 - SpringApplication启动流程七

SpringBoot 源码分析 - SpringApplication启动流程七 初始化基本流程SpringApplication的prepareContext准备上下文postProcessApplicationContext处理applyInitializers初始化器初始化load SpringApplication的refreshContext刷新上下文refreshServletWebServerApplicationCon…

8.什么是HOOK

程序编译的本质是&#xff0c;首先计算机它只能看得懂机器码也就是只能看得懂数字&#xff0c;机器码学起来很费劲然后就创造了编译器这个东西&#xff0c;编译器它懂机器语言所以它可以跟机器沟通&#xff0c;而我们人可以跟编译器沟通&#xff0c;人跟编译器的语言就是各种各…

[Vulnhub]Vulnix 通过NFS挂载+SSH公钥免密登录权限提升

端口扫描 Server IP AddressPorts Open192.168.8.103TCP:22/tcp, 25/tcp, 79/tcp, 110/tcp, 111/tcp, 143/tcp, 512/tcp, 513/tcp, 514/tcp, 993/tcp, 995/tcp, 2049/tcp, 37522/tcp, 42172/tcp, 43219/tcp, 47279/tcp, 54227/tcp $ nmap -p- 192.168.8.103 -sV -sC --min-ra…

MyBatis系统学习 - 使用Mybatis完成查询单条,多条数据,模糊查询,动态设置表名,获取自增主键

上篇博客我们围绕Mybatis链接数据库进行了相关概述&#xff0c;并对Mybatis的配置文件进行详细的描述&#xff0c;本篇博客也是建立在上篇博客之上进行的&#xff0c;在上面博客搭建的框架基础上&#xff0c;我们对MyBatis实现简单的增删改查操作进行重点概述&#xff0c;在MyB…

P459 包装类Wrapper

包装类的分类 1&#xff09;针对八种基本数据类型相应的引用类型——包装类。 2&#xff09;有了类的特点&#xff0c;就可以调用类中的方法。 Boolean包装类 Character包装类 其余六种Number类型的包装类 包装类和基本数据类型的相互转换 public class Integer01 {publi…

解决文件夹打开出错问题:原因、数据恢复与预防措施

在我们日常使用电脑或移动设备时&#xff0c;有时会遇到一个非常棘手的问题——文件夹打开出错。这种错误可能会让您无法访问重要的文件和数据&#xff0c;给工作和生活带来极大的不便。本文将带您深入了解文件夹打开出错的原因&#xff0c;并提供有效的数据恢复方案&#xff0…

【网络协议】应用层协议--HTTP

文章目录 一、HTTP是什么&#xff1f;二、HTTP协议工作过程三、HTTP协议1. fiddler2. Fiddler抓包的原理3. 代理服务器是什么?4. HTTP协议格式1.1 请求1.2 响应 四、认识HTTP的请求1.认识HTTP请求的方法2.认识请求头&#xff08;header&#xff09;3.认识URL3.1 URL是什么&…