Python数据可视化(五)

实现GUI效果

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

 

一,类 RadioButtons 的使用方法

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

1.代码示例

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.widgets import RadioButtons

x = 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 np

from matplotlib.widgets import Cursor

lineprops = 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 np

from matplotlib.widgets import CheckButtons

x = 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效果的工作目标。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

属于程序员的浪漫,一颗会跳动的心!!!

绘制一颗会跳动的心❤ 嘿嘿 可以说是程序员的专属浪漫了吧&#xff0c;就像点燃一颗LED灯一样&#xff1f;&#xff08;我瞎说的啊&#xff0c;大家别当真&#xff0c;我很菜的&#xff01;&#xff01;&#xff01;&#xff01;&#xff09; 程序就在下面啦&#xff0c;然…

​✨聚梦AI绘图插件-for photoshop(基于ComfyUI) 内测版V0.1发布

&#x1f388;背景 photoshop本身是有AI生成能力的&#xff0c;不过限于种种原因&#xff0c;国内使用很不方便。 photoshop也是有AI插件的&#xff0c;不过大多安装起来比较复杂&#xff0c;或者&#xff0c;干脆就会收费。 所以我们做了一个免费的AI插件&#xff0c;期望能…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章&#xff1a;Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音&#xff1a;/vju…

如同“水生态”的存储引擎|OceanBase数据转储合并技术解读(一)

本系列文章主要围绕 OceanBase数据库存储引擎中的转储合并进行解读&#xff0c;涉及到数据存储、转储合并、数据校验等方面的内容&#xff0c;旨在让读者了解OceanBase数据库的存储引擎中与转储合并有关的各种概念&#xff0c;帮助读者更好地理解OceanBase数据库的存储技术原理…

20240526怎样将windows的屏幕复制到第二屏

百度&#xff1a;WIN10 第二显示器 COPY https://zhidao.baidu.com/question/761454546683111004.html 20240526怎样将windows的屏幕复制到第二屏  我来答 分享 举报 2个回答#热议# 海关有哪些禁运商品&#xff1f;查到后怎么办&#xff1f; 华硕服务 2022-07-05 百度认证:…

C++模板——函数模板和类模板

目录 泛型编程 函数模板 函数模板概念 函数模板的定义和语法 函数模板的工作原理 函数模板的实例化 隐式实例化 显示实例化 函数模板的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 什么是泛型编程&#xff1f; 泛型编程&#xff08;Generic Pr…

Sam Altman微软Build 2024最新演讲:AI可能是下一个移动互联网

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus构建的全栈前后端分离管理系统

gfast&#xff1a;基于全新Go Frame 2.3Vue3Element Plus构建的全栈前后端分离管理系统 随着信息技术的飞速发展和数字化转型的深入&#xff0c;后台管理系统在企业信息化建设中扮演着越来越重要的角色。为了满足市场对于高效、灵活、安全后台管理系统的需求&#xff0c;gfast应…

人工智能+量子计算:飞跃现实边界还是科技幻想?

人工智能量子计算&#xff0c;这是一种可能改变世界的伙伴关系。 在科技的前沿&#xff0c;两大革命性技术——人工智能&#xff08;AI&#xff09;和量子计算——正站在合作的十字路口。人工智能&#xff0c;以其强大的数据分析能力和模式识别&#xff0c;正在改变着我们生活…

MOS选型及其参数解析

背景&#xff1a; 整理现有常用元器件选型&#xff0c;日后使用时针对性观看&#xff0c;生成列表链接如下&#xff1a; https://blog.csdn.net/caozhaokun/article/details/126069701 作者&#xff1a;Cayden 时间&#xff1a;2024/05/26 一、MOS选用现状 MOS是电路设计…

【软件设计师】面向对象技术

1.面向对象基础 1.1 基本概念 方法重载是函数名字相同&#xff0c;参数列表不同 组成 即组合&#xff0c;指整体与部分的关系&#xff0c;整体与部分生命周期相同 聚合 关联关系的一个特例&#xff0c;是体现整体与部分&#xff0c;即使has-a的关系&#xff0c;此时整体与部分…

设计模式在芯片验证中的应用——模板方法

一、模板方法 模板方法(Template Method)设计模式是一种行为设计模式&#xff0c; 它在父类中定义了一个功能的框架&#xff0c; 允许子类在不修改结构的情况下重写功能的特定步骤。也就是模板方法定义了一组有序执行的操作&#xff0c;将一些步骤的实现留给子类&#xff0c;同…

6818 android 修改开机 logo, 编译脚本分析

问题&#xff1a; 客户需要去掉 android5.1 的开机logo. 说明&#xff1a; 对于Android5.1 来说&#xff0c;uboot 与kernel 的logo 是一个。 过程&#xff1a; 其实对于开机logo 的修改很简单&#xff0c;直接参考厂家手册就可以了。 这是 android4.4 的开机logo 的修改&…

Ps:消失点滤镜 - 导出 3D 信息

Ps菜单&#xff1a;滤镜/消失点 Filter/Vanishing Point 快捷键&#xff1a;Ctrl Alt V “消失点”滤镜的导出 Export功能允许用户将创建的 3D 信息&#xff08;包括平面、纹理和测量&#xff09;导出为兼容 CAD、建模、动画和特殊效果应用程序的格式。这使得 Photoshop 与其…

上位机图像处理和嵌入式模块部署(f103 mcu和Qt上位机联动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前我们写过一篇文章​​​​​​​&#xff0c;上面说的是如何利用串口对mcu进行控制&#xff0c;即如果利用串口实现mcu led灯的点亮和熄灭。输…

【开源】租房管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、系统介绍 租客屋主模块 房源信息模块 租客评价模块 房源订单模块 留言板模块 二、系统截图 三、核心代码 一、系统介绍 基于Vue.js和SpringBoot的租房管理系统&#xff0c;分为管理后台和用户网页端&#xff0c;可以给管理员、租客和屋主角色使用&#xff0c…

深入JVM元空间以及弹性伸缩机制

个人博客 深入JVM元空间以及弹性伸缩机制 | iwts’s blog JVM内存模型中元空间所在位置 即在JVM运行时的内存模型。总体上有这样的图&#xff1a; 元空间 上面的图其实有点不太准。方法区本质上只是JVM的一个标准&#xff0c;不同JVM在不同版本下都可能有不同的实现&#x…

民国漫画杂志《时代漫画》第25期.PDF

时代漫画25.PDF: https://url03.ctfile.com/f/1779803-1248635084-fd4794?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

2024年上半年软件系统架构师考试【回忆版】

文章目录 考试时间考试地点综合知识案例分析1、微服务架构的优点和缺点2、质量属性的6个要素3、分布式锁 Redis的缺点4、MongoDB 存储矢量图的优势 论文回忆版论文一、论单元测试的设计与应用论文二、论大数据模型的设计与应用论文三、论模型驱动的架构设计及应用论文四、论云原…

浅谈Docker容器的网络通信原理

文章目录 1、回顾容器概念2、容器网络3、容器与主机之间的网络连通4、交换机的虚拟实现---虚拟网桥&#xff08;Bridge&#xff09;5、Docker 守护进程daemon管理容器网络 1、回顾容器概念 我们知道容器允许我们在同一台宿主机&#xff08;电脑&#xff09;上运行多个服务&…