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次提交 把文件夹内的…

element-plus dialog 修改密码mask没有覆盖全屏

最近在使用element-plus中的Dialog对话框的时候,做修改密码的功能&#xff0c;我放在navbar组件中,造成了打开对话框的遮罩层无法全屏显示, append-to-body Dialog 自身是否插入至 body 元素上。 嵌套的 Dialog 必须指定该属性并赋值为 true 这个属性加到el-dialog上即可,然后…

# SSH端口转发之上网代理、正向代理、反向代理用法

SSH端口转发之上网代理、正向代理、反向代理用法 文章目录 SSH端口转发之上网代理、正向代理、反向代理用法1 ssh参数说明&#xff1a;2 一般用法&#xff1a;3 用法范例&#xff1a;4 示例与解释&#xff1a;5 SSH概念详解**5.1. SSH端口转发的概念****5.2. SSH端口转发的类型…

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

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

力扣爆刷第144天之二叉树四连刷(完结二叉搜索树改变树结构)

力扣爆刷第144天之二叉树五连刷&#xff08;二叉搜索树&#xff09; 文章目录 力扣爆刷第144天之二叉树五连刷&#xff08;二叉搜索树&#xff09;一、450. 删除二叉搜索树中的节点二、669. 修剪二叉搜索树三、108. 将有序数组转换为二叉搜索树四、538. 把二叉搜索树转换为累加…

【JavaScript】文件下载

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

CCF-GESP 等级考试 2024年3月认证C++一级真题解析

2024年03月真题 1 单选题 第 1 题 C表达式(3 - 2) * 3 5的值是( )。 A. -13B. 8C. 2D. 0 正确答案&#xff1a;B. 8 解析&#xff1a; 首先计算括号中的表达式 (3 - 2)&#xff0c;得到 (1)。接下来进行乘法运算 (1 * 3)&#xff0c;得到 (3)。最后进行加法运算 (3 5)&…

Linux:Ubuntu系统配置本地apt仓库

Linux&#xff1a;Ubuntu系统配置本地apt仓库 文章目录 Linux&#xff1a;Ubuntu系统配置本地apt仓库挂载本地的光驱到指定的挂载目录编辑开机挂载配置文件检查开机挂载配置文件的语法是否正确检查开机设置是否成功对原有的sourece.list文件进行重命名使其失效使用命令自动生成…

【二叉树】力扣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帧等数据&…

纯前端实现将页面数据下载word文档中【包括图片,echarts图,表格,和对话 内容】

亲测真实有效 导出word步骤 在Vue中导出Word文档&#xff0c;可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库&#xff1a; npm install file-saver html-docx-js --save "html-docx-js": "0.3.1","file-saver": "2.0.5…

HADOOP permission denied解决方法(如果你ssh已经确认没问题了)

网上各种方法都是让你去把ssh配置好&#xff0c;让权限chmod 755&#xff0c;但我怎么试都没有用。 并且我的ssh已经能让master登入slave了&#xff0c;这个本来就是没有问题的。不要再尝试了。 有另一种可能的报错&#xff0c;就是你的文件全都被锁住了。可以上slave机上看看…